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 document.createDocumentFragment()
Apr 04 Javascript
JavaScript 动态添加表格行 使用模板、标记
Oct 24 Javascript
javascript中window.event事件用法详解
Dec 11 Javascript
js中Image对象以及对其预加载处理示例
Nov 20 Javascript
JS中Date日期函数中的参数使用介绍
Jan 02 Javascript
删除Javascript Object中间的key
Nov 18 Javascript
javascript框架设计读书笔记之数组的扩展与修复
Dec 02 Javascript
JavaScript 数组some()和filter()的用法及区别
May 20 Javascript
移动端日期插件Mobiscroll.js使用详解
Dec 19 Javascript
详解Angular 4 表单快速入门
Jun 05 Javascript
vue中created和mounted的区别浅析
Aug 13 Javascript
关于Vue中$refs的探索浅析
Nov 05 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
ThinkPHP模板中判断volist循环的最后一条记录的验证方法
2014/07/01 PHP
thinkphp循环结构用法实例
2014/11/24 PHP
详解PHP5.6.30与Apache2.4.x配置
2017/06/02 PHP
php 中phar包的使用教程详解
2018/10/26 PHP
php输出文字乱码的解决方法
2019/10/04 PHP
总结一些js自定义的函数
2006/08/05 Javascript
JavaScript在IE和Firefox(火狐)的不兼容问题解决方法小结
2010/04/13 Javascript
div模拟滚动条效果示例代码
2013/10/16 Javascript
Jquery跳到页面指定位置的方法
2014/05/12 Javascript
使用javascript实现json数据以csv格式下载
2015/01/09 Javascript
JQ实现新浪游戏首页幻灯片
2015/07/29 Javascript
Eclipse引入jquery报错如何解决
2015/12/01 Javascript
基于JS模仿windows文件按名称排序效果
2016/06/29 Javascript
基于jQuery实现仿微博发布框字数提示
2016/07/27 Javascript
详解Webpack DLL用法以及功能
2017/07/11 Javascript
Angular实现响应式表单
2017/08/04 Javascript
webpack多页面开发实践
2017/12/18 Javascript
一步步教会你微信小程序的登录鉴权
2018/04/09 Javascript
vue.js层叠轮播效果的实例代码
2018/11/08 Javascript
JavaScript解析及序列化JSON的方法实例分析
2019/01/04 Javascript
从零到一详聊创建Vue工程及遇到的常见问题
2019/04/25 Javascript
[26:50]2018完美盛典DOTA2表演赛
2018/12/17 DOTA
简单介绍Python中的几种数据类型
2016/01/02 Python
python2.7 json 转换日期的处理的示例
2018/03/07 Python
Python字符串的一些操作方法总结
2019/06/10 Python
Pytorch Tensor基本数学运算详解
2019/12/30 Python
在TensorFlow中屏蔽warning的方式
2020/02/04 Python
Python爬虫实现自动登录、签到功能的代码
2020/08/20 Python
详解Python+Selenium+ChromeDriver的配置和问题解决
2021/01/19 Python
大学自主招生自荐信
2013/12/16 职场文书
二年级体育教学反思
2014/01/15 职场文书
迎八一活动主题
2014/01/31 职场文书
优秀班集体获奖感言
2014/02/03 职场文书
2015元旦主持词开场白和结束语
2014/12/14 职场文书
工程技术负责人岗位职责
2015/04/13 职场文书
CentOS MySql8 远程连接实战
2022/04/19 MySQL