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 对象的定义方法
Jan 10 Javascript
Javascript中定义方法的另类写法(批量定义js对象的方法)
Feb 25 Javascript
40个新鲜出炉的jQuery 插件和免费教程[上]
Jul 24 Javascript
JQuery 图片的展开和伸缩实例讲解
Apr 18 Javascript
Extjs根据条件设置表格某行背景色示例
Jul 23 Javascript
jquery pagination插件动态分页实例(Bootstrap分页)
Dec 23 Javascript
微信小程序 Template详解及简单实例
Jan 05 Javascript
jquery表单验证实例仿Toast提示效果
Mar 03 Javascript
深入理解Webpack 中路径的配置
Jun 17 Javascript
jQuery+Datatables实现表格批量删除功能【推荐】
Oct 24 jQuery
详解vue-cli+es6引入es5写的js(两种方法)
Apr 19 Javascript
node.js使用http模块创建服务器和客户端完整示例
Feb 10 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
PHP5 安装方法
2006/10/09 PHP
Laravel 5.4重新登录实现跳转到登录前页面的原理和方法
2017/07/13 PHP
VBScript版代码高亮
2006/06/26 Javascript
JQuery使用$.ajax和checkbox实现下次不在通知功能
2015/04/16 Javascript
jQuery实现百叶窗焦点图动画效果代码分享(附源码下载)
2016/03/14 Javascript
Bootstrap3.0学习教程之JS折叠插件
2016/05/27 Javascript
Node.js connect ECONNREFUSED错误解决办法
2016/09/15 Javascript
jQuery Plupload上传插件的使用
2017/04/19 jQuery
angularJS 发起$http.post和$http.get请求的实现方法
2017/05/18 Javascript
JS实现li标签的删除
2019/04/12 Javascript
微信小程序自定义tabbar custom-tab-bar 6s出不来解决方案(cover-view不兼容)
2019/11/01 Javascript
vue.js this.$router.push获取不到params参数问题
2020/03/03 Javascript
基于js实现逐步显示文字输出代码实例
2020/04/02 Javascript
javascript实现时间日期的格式化的方法汇总
2020/08/06 Javascript
Python实现的数据结构与算法之链表详解
2015/04/22 Python
Python实现二维数组输出为图片
2018/04/03 Python
python3下pygame如何实现显示中文
2020/01/11 Python
Python3.6 + TensorFlow 安装配置图文教程(Windows 64 bit)
2020/02/24 Python
Django-rest-framework中过滤器的定制实例
2020/04/01 Python
Html5页面上如何禁止手机虚拟键盘弹出
2020/03/19 HTML / CSS
可口可乐唇膏:Lip Smackers
2019/08/27 全球购物
C#面试常见问题
2013/02/25 面试题
工程业务员工作职责
2013/12/07 职场文书
幼儿园教师国培感言
2014/02/02 职场文书
草船借箭教学反思
2014/02/03 职场文书
超市开店计划书
2014/04/26 职场文书
服务行业口号
2014/06/11 职场文书
文艺晚会策划方案
2014/06/11 职场文书
纪律教育学习心得体会
2014/09/02 职场文书
学习朴航瑛老师爱岗敬业先进事迹思想汇报
2014/09/17 职场文书
纪委书记群众路线整改措施思想汇报
2014/10/09 职场文书
2015年医院工作总结范文
2015/04/09 职场文书
2015年惩防体系建设工作总结
2015/05/22 职场文书
公司车队管理制度
2015/08/04 职场文书
python使用PySimpleGUI设置进度条及控件使用
2021/06/10 Python
阿里云ECS云服务器快照的概念以及如何使用
2022/04/21 Servers