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 相关文章推荐
jquery解决图片路径不存在执行替换路径
Feb 06 Javascript
JS父页面与子页面相互传值方法
Mar 05 Javascript
js动态改变select选择变更option的index值示例
Jul 10 Javascript
jQuery中triggerHandler()方法用法实例
Jan 19 Javascript
BootStrap轻松实现微信页面开发代码分享
Oct 21 Javascript
javascript prototype原型详解(比较基础)
Dec 26 Javascript
JavaScript用JSONP跨域请求数据实例详解
Jan 06 Javascript
原生js实现返回顶部缓冲效果
Jan 18 Javascript
JavaScript寄生组合式继承实例详解
Jan 06 Javascript
js防抖和节流的深入讲解
Dec 06 Javascript
Nuxt.js 数据双向绑定的实现
Feb 17 Javascript
微信小程序实现电子签名功能
Jul 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
怎样辨别一杯好咖啡
2021/03/03 新手入门
php字符串截取的简单方法
2013/07/04 PHP
PHP进制转换实例分析(2,8,16,36,64进制至10进制相互转换)
2017/02/04 PHP
Add a Formatted Table to a Word Document
2007/06/15 Javascript
JavaScript聚焦于第一个字段的代码
2010/10/15 Javascript
javascript数字数组去重复项的实现代码
2010/12/30 Javascript
高性能Javascript笔记 数据的存储与访问性能优化
2012/08/02 Javascript
jquery连缀语法如何实现
2012/11/29 Javascript
js判断IE浏览器版本过低示例代码
2013/11/22 Javascript
jquery插件推荐 jquery.cookie
2014/11/09 Javascript
jQuery超赞的评分插件(8款)
2015/08/20 Javascript
整理Javascript流程控制语句学习笔记
2015/11/29 Javascript
jQuery ready()和onload的加载耗时分析
2016/09/08 Javascript
JavaScript中校验银行卡号的实现代码
2016/12/19 Javascript
angular使用post、get向后台传参的问题实例
2017/05/27 Javascript
详解Angular-cli生成组件修改css成less或sass的实例
2017/07/27 Javascript
JavaScript模块模式实例详解
2017/10/25 Javascript
利用vue.js把静态json绑定bootstrap的table方法
2018/08/28 Javascript
python 图片验证码代码
2008/12/07 Python
Python3基础之函数用法
2014/08/13 Python
Python插件virtualenv搭建虚拟环境
2017/11/20 Python
python3+PyQt5+Qt Designer实现扩展对话框
2018/04/20 Python
Python定义一个跨越多行的字符串的多种方法小结
2018/07/19 Python
纯CSS3发光分享按钮的实现教程
2014/09/06 HTML / CSS
在IE6系列等老式浏览器中使用HTML5的新标签实现方案
2012/12/25 HTML / CSS
全球速卖通法国在线交易平台:AliExpress法国
2017/07/07 全球购物
美国新娘礼品店:The Paisley Box
2020/09/08 全球购物
法制宣传月活动方案
2014/05/11 职场文书
2014年党的群众路线教育实践活动整改措施(个人版)
2014/09/25 职场文书
美国旅游签证工作证明
2014/10/14 职场文书
离职报告范文
2014/11/04 职场文书
师德先进个人事迹材料
2014/12/19 职场文书
房地产工程部经理岗位职责
2015/04/09 职场文书
学生会自荐信
2019/05/16 职场文书
合理缓解职场压力,让你随时保持最佳状态!
2019/06/21 职场文书
一文搞懂Java中的注解和反射
2022/06/21 Java/Android