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 相关文章推荐
理解Javascript_05_原型继承原理
Oct 13 Javascript
jQuery的3种请求方式$.post,$.get,$.getJSON
Mar 28 Javascript
JavaScript动态加载样式表的方法
Mar 21 Javascript
php常见的页面跳转方法汇总
Apr 15 Javascript
JS制作手机端自适应缩放显示
Jun 11 Javascript
JQuery工具函数汇总
Jun 15 Javascript
jQuery遮罩层实现方法实例详解(附遮罩层插件)
Dec 08 Javascript
JavaScript继承模式粗探
Jan 12 Javascript
浅谈JavaScript的innerWidth与innerHeight
Oct 12 Javascript
ES6中javascript实现函数绑定及类的事件绑定功能详解
Nov 08 Javascript
Vue引用Swiper4插件无法重写分页器样式的解决方法
Sep 27 Javascript
JS实现点击掉落特效
Jan 29 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
php中mkdir函数用法实例分析
2014/11/15 PHP
PHP魔术方法使用方法汇总
2016/02/14 PHP
PHP Imagick完美实现图片裁切、生成缩略图、添加水印
2016/02/22 PHP
JSON两种结构之对象和数组的理解
2016/07/19 PHP
PHP操作Postgresql封装类与应用完整实例
2018/04/24 PHP
javascript 嵌套的函数(作用域链)
2010/03/15 Javascript
日期处理的js库(迷你版)--自建js库总结
2011/11/21 Javascript
关于innerHTML后丢失动态绑定的EVENT问题解决方法
2013/05/19 Javascript
JavaScript创建对象的写法
2013/08/29 Javascript
JS阻止冒泡事件以及默认事件发生的简单方法
2014/01/17 Javascript
JavaScript的arguments对象应用示例
2014/09/15 Javascript
jquery获取select选中值的方法分析
2015/12/22 Javascript
浅析AngularJs HTTP响应拦截器
2015/12/28 Javascript
JavaScript计算器网页版实现代码分享
2016/07/15 Javascript
jQuery特殊符号转义的实现
2016/11/30 Javascript
vue实现简单实时汇率计算功能
2017/01/15 Javascript
vue.js实现用户评论、登录、注册、及修改信息功能
2020/05/30 Javascript
详解vue-cli 构建项目 vue-cli请求后台接口 vue-cli使用axios、sass、swiper
2018/05/28 Javascript
this在vue和小程序中的使用详解
2019/01/28 Javascript
详解Vue前端对axios的封装和使用
2019/04/01 Javascript
详解vue中axios请求的封装
2019/04/08 Javascript
Elementui表格组件+sortablejs实现行拖拽排序的示例代码
2019/08/28 Javascript
mui js控制开关状态、修改switch开关的值方法
2019/09/03 Javascript
JS数据类型分类及常用判断方法
2020/11/19 Javascript
python中的列表推导浅析
2014/04/26 Python
pygame学习笔记(3):运动速率、时间、事件、文字
2015/04/15 Python
Python 正则表达式的高级用法
2016/12/04 Python
Python线程障碍对象Barrier原理详解
2019/12/02 Python
adidas马来西亚官网:adidas MY
2020/09/12 全球购物
电子商务专业在校生实习自我鉴定
2013/09/29 职场文书
幼师专业求职推荐信
2013/11/08 职场文书
行政经理的岗位职责
2013/11/23 职场文书
拒绝黄毒毒宣传标语
2014/06/26 职场文书
竞选班干部演讲稿300字
2014/08/20 职场文书
公务员四风问题对照检查材料整改措施
2014/09/26 职场文书
JAVA SpringMVC实现自定义拦截器
2022/03/16 Python