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的IE和Firefox兼容性汇编(zz)
Feb 02 Javascript
javascript SocialHistory 检查访问者是否访问过某站点
Aug 02 Javascript
prototype Element学习笔记(篇二)
Oct 26 Javascript
Javascript模块化编程(一)AMD规范(规范使用模块)
Jan 17 Javascript
一个简单的JS鼠标悬停特效具体方法
Jun 17 Javascript
自定义百度分享的分享按钮
Mar 18 Javascript
jquery实现两边飘浮可关闭的对联广告
Nov 27 Javascript
jQuery鼠标事件总结
Oct 13 Javascript
js表单登陆验证示例
Oct 19 Javascript
vue实现简单的星级评分组件源码
Nov 16 Javascript
vue实现跨域的方法分析
May 21 Javascript
vue选项卡切换登录方式小案例
Sep 27 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连接Access数据库错误及解决方法
2013/06/20 PHP
Laravel学习教程之View模块详解
2017/09/18 PHP
php-msf源码详解
2017/12/25 PHP
PHP基础之输出缓冲区基本概念、原理分析
2019/06/19 PHP
JS效率个人经验谈(8-15更新),加入range技巧
2007/01/09 Javascript
优化网页之快速的呈现我们的网页
2007/06/29 Javascript
JavaScript中的Location地址对象
2008/01/16 Javascript
js+ajax实现获取文件大小的方法
2015/12/08 Javascript
BootStrap 智能表单实战系列(五) 表单依赖插件处理
2016/06/13 Javascript
Html5+jQuery+CSS制作相册小记录
2016/12/30 Javascript
Javascript中for循环语句的几种写法总结对比
2017/01/23 Javascript
判断横屏竖屏(三种)
2017/02/13 Javascript
基于JavaScript实现简单的音频播放功能
2018/01/07 Javascript
js中DOM事件绑定分析
2018/03/18 Javascript
Python写的一个简单DNS服务器实例
2014/06/04 Python
Python实现压缩和解压缩ZIP文件的方法分析
2017/09/28 Python
Python用5行代码写一个自定义简单二维码
2018/10/21 Python
Python面向对象总结及类与正则表达式详解
2019/04/18 Python
详解Python绘图Turtle库
2019/10/12 Python
tf.concat中axis的含义与使用详解
2020/02/07 Python
python Socket网络编程实现C/S模式和P2P
2020/06/22 Python
解决Python3.8运行tornado项目报NotImplementedError错误
2020/09/02 Python
Viking Direct爱尔兰:办公用品和家具
2019/11/21 全球购物
行政专员岗位职责
2014/01/02 职场文书
事务机电主管工作职责
2014/02/25 职场文书
中式结婚主持词
2014/03/14 职场文书
年终总结会主持词
2014/03/25 职场文书
小学语文课后反思精选
2014/04/25 职场文书
创建绿色社区汇报材料
2014/08/22 职场文书
秋季运动会开幕词
2015/01/28 职场文书
实习单位推荐信
2015/03/27 职场文书
高中诗歌鉴赏教学反思
2016/02/16 职场文书
车辆挂靠协议书
2016/03/23 职场文书
励志语录:只有自己足够强大,才能不被别人践踏
2020/01/09 职场文书
react合成事件与原生事件的相关理解
2021/05/13 Javascript
Android Studio 计算器开发
2022/05/20 Java/Android