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 vvorld 在线加密破解方法
Nov 13 Javascript
js 判断 enter 事件
Feb 12 Javascript
基于jQuery的一个扩展form序列化到json对象
Dec 09 Javascript
JavaScript中检测变量是否存在遇到的一些问题
Nov 11 Javascript
jQuery弹出框代码封装DialogHelper
Jan 30 Javascript
jQuery构造函数init参数分析
May 13 Javascript
浅谈jquery中delegate()与live()
Jun 22 Javascript
jQuery mobile转换url地址及获取url中目录部分的方法
Dec 04 Javascript
jQuery图片旋转插件jQueryRotate.js用法实例(附demo下载)
Jan 21 Javascript
JavaScript File分段上传
Mar 10 Javascript
JavaScript中offsetWidth的bug及解决方法
May 17 Javascript
React中this丢失的四种解决方法
Mar 12 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 存取 MySQL 数据库的一个例子
2006/10/09 PHP
PHP写杨辉三角实例代码
2011/07/17 PHP
采集邮箱的php代码(抓取网页中的邮箱地址)
2012/07/17 PHP
php导出word文档与excel电子表格的简单示例代码
2014/03/08 PHP
JS 时间显示效果代码
2009/08/23 Javascript
JS在IE和FireFox之间常用函数的区别小结
2010/03/12 Javascript
js精度溢出解决方案
2012/12/02 Javascript
js作用域及作用域链概念理解及使用
2013/04/15 Javascript
JavaScript学习心得之概述
2015/01/20 Javascript
Js与Jq 获取页面元素值的方法和差异对比
2015/04/30 Javascript
vue 系列——vue2-webpack2框架搭建踩坑之路
2017/12/22 Javascript
JS实现验证码倒计时的注册页面
2018/01/02 Javascript
layui多图上传实现删除功能的例子
2019/09/23 Javascript
使用axios请求时,发送formData请求的示例
2019/10/29 Javascript
python修改字典内key对应值的方法
2015/07/11 Python
Python 爬虫爬取指定博客的所有文章
2016/02/17 Python
删除DataFrame中值全为NaN或者包含有NaN的列或行方法
2018/11/06 Python
python 用户交互输入input的4种用法详解
2019/09/24 Python
pytorch查看torch.Tensor和model是否在CUDA上的实例
2020/01/03 Python
Python pip配置国内源的方法
2020/02/14 Python
Python修改列表值问题解决方案
2020/03/06 Python
python 通过文件夹导入包的操作
2020/06/01 Python
详解numpy.ndarray.reshape()函数的参数问题
2020/10/13 Python
深入理解HTML5定时器requestAnimationFrame的使用
2018/12/12 HTML / CSS
美国50岁以上单身人士约会平台:SilverSingles
2018/06/29 全球购物
美国家居装饰网上商店:Lulu & Georgia
2019/09/14 全球购物
加拿大拼图大师:Puzzle Master
2020/12/28 全球购物
如何强制垃圾回收
2015/10/06 面试题
会计毕业生自我鉴定
2013/11/04 职场文书
党的群众路线教育实践活动批评与自我批评
2014/02/16 职场文书
幼儿园大班家长评语
2014/04/17 职场文书
烹饪大赛策划方案
2014/05/26 职场文书
2015双创工作总结
2015/07/24 职场文书
2016年春季开学典礼新闻稿
2015/11/25 职场文书
如何在C++中调用Python
2021/05/21 Python
MySQL七大JOIN的具体使用
2022/02/28 MySQL