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 相关文章推荐
document.createElement()用法
Mar 13 Javascript
js 距离某一时间点时间是多少实现代码
Oct 14 Javascript
js简单的表格添加行和删除行操作示例
Mar 31 Javascript
学习AngularJs:Directive指令用法(完整版)
Apr 26 Javascript
JS输出空格的简单实现方法
Sep 08 Javascript
javascript cookie用法基础教程(概念,设置,读取及删除)
Sep 20 Javascript
微信小程序Redux绑定实例详解
Jun 07 Javascript
vue中各组件之间传递数据的方法示例
Jul 27 Javascript
详解如何在angular2中获取节点
Nov 23 Javascript
webpack 静态资源集中输出的方法示例
Nov 09 Javascript
es6数组includes()用法实例分析
Apr 18 Javascript
微信小程序实现翻牌抽奖动画
Sep 21 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通用查询程序
2007/03/11 PHP
用PHP生成静态HTML速度快类库
2007/03/18 PHP
php strftime函数获取日期时间(switch用法)
2018/05/16 PHP
PHP实现提高SESSION响应速度的几种方法详解
2019/08/09 PHP
PHP实现文件上传操作和封装
2020/03/04 PHP
总结AJAX相关JS代码片段和浏览器模型
2007/08/15 Javascript
什么是JavaScript
2009/08/13 Javascript
jQuery实现提示密码强度的代码
2015/07/15 Javascript
javascript类型系统 Array对象学习笔记
2016/01/09 Javascript
基于JavaScript实现 网页切出 网站title变化代码
2016/04/03 Javascript
Angularjs过滤器使用详解
2016/05/25 Javascript
漂亮! js实现颜色渐变效果
2016/08/12 Javascript
原生js实现选项卡功能
2017/03/08 Javascript
JavaScript简单计算人的年龄示例
2017/04/15 Javascript
React学习笔记之列表渲染示例详解
2017/08/22 Javascript
Scala解析Json字符串的实例详解
2017/10/11 Javascript
JS计算输出100元钱买100只鸡问题的解决方法
2018/01/04 Javascript
微信小程序学习笔记之表单提交与PHP后台数据交互处理图文详解
2019/03/28 Javascript
用JS实现一个简单的打砖块游戏
2019/12/11 Javascript
[01:14]DOTA2亚洲邀请赛小组赛赛前花絮
2017/03/27 DOTA
python+Splinter实现12306抢票功能
2018/09/25 Python
selenium+python截图不成功的解决方法
2019/01/30 Python
Python时间序列处理之ARIMA模型的使用讲解
2019/04/02 Python
python爬虫解决验证码的思路及示例
2019/08/01 Python
Python创建数字列表的示例
2019/11/28 Python
Python函数的定义方式与函数参数问题实例分析
2019/12/26 Python
python对批量WAV音频进行等长分割的方法实现
2020/09/25 Python
html5利用canvas绘画二级树形结构图的示例
2017/09/27 HTML / CSS
html5基础标签(html5视频标签 html5新标签用法)
2013/12/30 HTML / CSS
美国和加拿大计算机和电子产品购物网站:TigerDirect.com
2019/09/13 全球购物
介绍一下Ruby的多线程处理
2013/02/01 面试题
护士求职自荐信范文
2014/03/19 职场文书
小学模范班主任事迹材料
2014/05/13 职场文书
土木工程专业本科生求职信
2014/10/01 职场文书
MySQL数据库 安全管理
2022/05/06 MySQL
Vue ECharts实现机舱座位选择展示功能
2022/05/15 Vue.js