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 load事件(callback/data)使用方法及注意事项
Feb 06 Javascript
js实现图片在未加载完成前显示加载中字样
Sep 03 Javascript
jQuery的css()方法用法实例
Dec 24 Javascript
jQuery内部原理和实现方式浅析
Feb 03 Javascript
JavaScript匿名函数之模仿块级作用域
Dec 12 Javascript
浏览器兼容的JS写法总结
Apr 27 Javascript
bootstrap快速制作后台界面
Dec 05 Javascript
原生js实现吸顶效果
Mar 13 Javascript
Bootstrap Table使用整理(三)
Jun 09 Javascript
Vue 组件传值几种常用方法【总结】
May 28 Javascript
vue中关闭eslint的方法分析
Aug 04 Javascript
前端js中的事件循环eventloop机制详解
May 15 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使用fgetcsv读取csv文件出现乱码的解决方法
2014/11/08 PHP
解决Laravel5.5下的toArray问题
2019/10/15 PHP
在 PHP 和 Laravel 中使用 Traits的方法
2019/11/13 PHP
JavaScript 获取当前时间戳的代码
2010/08/05 Javascript
仿新浪微博返回顶部的jquery实现代码
2012/10/01 Javascript
javascript面向对象包装类Class封装类库剖析
2013/01/24 Javascript
jquery显示和隐藏div特效实例
2013/02/27 Javascript
使用javascript实现简单的选项卡切换
2015/01/09 Javascript
Bootstrap组件系列之福利篇几款好用的组件(推荐二)
2016/07/12 Javascript
基于Vue2.0的分页组件
2017/03/16 Javascript
使用ES6语法重构React代码详解
2017/05/09 Javascript
js学习心得_一个简单的动画库封装tween.js
2017/07/14 Javascript
javascript实现异形滚动轮播
2019/11/28 Javascript
jQuery操作元素的内容和样式完整实例分析
2020/01/10 jQuery
Typescript3.9 常用新特性一览(推荐)
2020/05/14 Javascript
vuex管理状态仓库使用详解
2020/07/29 Javascript
Python查找相似单词的方法
2015/03/05 Python
python学习数据结构实例代码
2015/05/11 Python
Python3爬虫全国地址信息
2019/01/05 Python
Python实现的在特定目录下导入模块功能分析
2019/02/11 Python
Python numpy中矩阵的基本用法汇总
2019/02/12 Python
一行python实现树形结构的方法
2019/08/09 Python
基于Python实现大文件分割和命名脚本过程解析
2019/09/29 Python
python多线程实现代码(模拟银行服务操作流程)
2020/01/13 Python
pytorch之Resize()函数具体使用详解
2020/02/27 Python
在python里使用await关键字来等另外一个协程的实例
2020/05/04 Python
利用CSS3实现的文字定时向上滚动
2016/08/29 HTML / CSS
澳大利高级泳装品牌:Bondi Born
2018/05/23 全球购物
治超工作实施方案
2014/05/04 职场文书
最美护士演讲稿
2014/08/27 职场文书
无刑事犯罪记录证明范本
2014/09/29 职场文书
悬崖上的金鱼姬观后感
2015/06/15 职场文书
红与黑读书笔记
2015/06/29 职场文书
浅谈Laravel中使用Slack进行异常通知
2021/05/29 PHP
Go语言实现Snowflake雪花算法
2021/06/08 Golang
Go 中的空白标识符下划线
2022/03/25 Golang