javascript实现网页子页面遍历回调的方法(涉及 window.frames、递归函数、函数上下文)


Posted in Javascript onJuly 27, 2015

本文实例讲述了javascript实现网页子页面遍历回调的方法(涉及 window.frames、递归函数、函数上下文)。分享给大家供大家参考。具体如下:

提炼于本人手写的纯 JavaScript 工具程序,用于遍历当前网页的所有子页面 并执行迭代回调,且回调函数返回值可用于结果回传,有助于减少闭包变量~

其特点在于 —— 递归遍历时只检索子页面的 Window 对象,不立即执行回调函数,而是在检索结束后在普通循环结构中回调。这样可以尽量减少 递归调用时的内存消耗,也简化了程序结构,易于维护

全局函数 Frame_Each( CallBack ):

(function (BOM) {
  function All_Frames(iWindow) {
    var _Frames_ = [].slice.call(iWindow.frames, 0);
    for (var i = 0; i < _Frames_.length; i++)
      _Frames_ = _Frames_.concat( arguments.callee(_Frames_[i]) );
    return _Frames_;
  }
  BOM.Frame_Each = function (CallBack) {
    var Frames = [this].concat( All_Frames(this) );
    if (! CallBack) return Frames;
    for (var i = 0, CBR; i < Frames.length; i++) {
      try { Frames[i].name; } catch (iError) { continue; }
      CBR = CallBack.apply(Frames[i], [].slice.call(arguments, 1));
      if (CBR === false) break;
      else if (CBR === undefined) continue;
      return CBR;
    }
  };
})(self);

使用示例:

// 无参数 —— 返回一个数组,包含函数调用所在的 Window 对象及其子页面的 Window,其顺序同递归遍历
var Pages = Frame_Each();
console.log( Pages.length );
// 定义回调 —— 回调返回值功能与普通循环语句的对应:
//  1. undefined:continue
//  2. false:break
//  3. 其它任何值:break && return Value
var Search_Result = Frame_Each(function () {
  var iFocus = this.document.activeElement;
  switch ( iFocus.tagName.toLowerCase() ) {
    case 'body':   return false;
    case 'iframe':  return;
  }
  return iFocus;
});
Search_Result.innerHTML = 'Hello, Focus!';

希望本文所述对大家的javascript程序设计有所帮助。

Javascript 相关文章推荐
学习ExtJS accordion布局
Oct 08 Javascript
javascript 面向对象全新理练之原型继承
Dec 03 Javascript
JavaScript NodeTree导航栏(菜单项JSON类型/自制)
Feb 01 Javascript
JavaScript组件焦点与页内锚点间传值的方法
Feb 02 Javascript
JS实现图片放大镜效果的方法
Feb 27 Javascript
JQuery自适应窗口大小导航菜单附源码下载
Sep 01 Javascript
用Webpack构建Vue项目的实践
Nov 07 Javascript
jQuery实现的模仿雨滴下落动画效果
Dec 11 jQuery
详解JS实现简单的时分秒倒计时代码
Apr 25 Javascript
深入浅析Vue中mixin和extend的区别和使用场景
Aug 01 Javascript
JQuery实现ul中添加LI和删除指定的Li元素功能完整示例
Oct 16 jQuery
如何用JavaScript实现一个数组惰性求值库
May 05 Javascript
JavaScript数组对象实现增加一个返回随机元素的方法
Jul 27 #Javascript
使用HTML+CSS+JS制作简单的网页菜单界面
Jul 27 #Javascript
Javascript验证Visa和MasterCard信用卡号的方法
Jul 27 #Javascript
JavaScript实现自动对页面上敏感词进行屏蔽的方法
Jul 27 #Javascript
javascript实现类似于新浪微博搜索框弹出效果的方法
Jul 27 #Javascript
JavaScript动态提示输入框输入字数的方法
Jul 27 #Javascript
JQUERY实现网页右下角固定位置展开关闭特效的方法
Jul 27 #Javascript
You might like
2020年4月放送决定!第2期TV动画《邪神酱飞踢》视觉图&主题曲情报公开!
2020/03/06 日漫
Excel数据导入Mysql数据库的实现代码
2008/06/05 PHP
sourcesafe管理phpproj文件的补充说明(downmoon)
2009/04/11 PHP
探讨如何在php168_cms中提取验证码
2013/06/08 PHP
Yii数据读取与跳转参数传递用法实例分析
2016/07/12 PHP
判断是否输入完毕再激活提交按钮
2006/06/26 Javascript
基于jquery DOM写的类似微博发布的效果
2012/10/20 Javascript
浅析webapp框架AngularUI的demo
2014/12/21 Javascript
解读Bootstrap v4 sass设计
2016/05/29 Javascript
JavaScript提高加载和执行效率的方法
2017/02/03 Javascript
分享一道关于闭包、bind和this的面试题
2017/02/20 Javascript
Angular.JS中指令ng-if、ng-show/ng-hide和ng-switch的使用教程
2017/05/07 Javascript
基于webpack 实用配置方法总结
2017/09/28 Javascript
JS对象与json字符串相互转换实现方法示例
2018/06/14 Javascript
JavaScript常见JSON操作实例分析
2018/08/08 Javascript
解决vue打包css文件中背景图片的路径问题
2018/09/03 Javascript
轻松解决JavaScript定时器越走越快的问题
2019/05/13 Javascript
Node.js Windows Binary二进制文件安装方法
2019/05/16 Javascript
[53:10]2018DOTA2亚洲邀请赛 4.6 淘汰赛 VP vs VG 第一场
2018/04/11 DOTA
在Python下使用Txt2Html实现网页过滤代理的教程
2015/04/11 Python
在Python中操作列表之list.extend()方法的使用
2015/05/20 Python
详解python selenium 爬取网易云音乐歌单名
2019/03/28 Python
python itchat给指定联系人发消息的方法
2019/06/11 Python
Python 一键获取百度网盘提取码的方法
2019/08/01 Python
pycharm 设置项目的根目录教程
2020/02/12 Python
在Python 的线程中运行协程的方法
2020/02/24 Python
HEMA英国:荷兰原创设计
2018/08/28 全球购物
介绍一下Linux内核的排队自旋锁
2014/01/04 面试题
童装店创业计划书
2014/01/09 职场文书
公司门卫的岗位职责
2014/02/19 职场文书
乔丹名人堂演讲稿
2014/05/24 职场文书
2015年客房服务员工作总结
2015/05/15 职场文书
六五普法心得体会2016
2016/01/21 职场文书
Redis模仿手机验证码发送的实现示例
2021/11/02 Redis
使用Python拟合函数曲线
2022/04/14 Python
利用Java连接Hadoop进行编程
2022/06/28 Java/Android