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 Div中加载其他页面的实现代码
Feb 27 Javascript
js中判断控件是否存在
Aug 25 Javascript
js 判断一个元素是否在页面中存在
Dec 27 Javascript
jQuery仿Flash上下翻动的中英文导航菜单实例
Mar 10 Javascript
js点击文本框后才加载验证码实例代码
Oct 20 Javascript
jQuery实现简单的点赞效果
May 29 Javascript
微信小程序 获取设备信息 API实例详解
Oct 02 Javascript
element-ui 表格实现单元格可编辑的示例
Feb 26 Javascript
JS与jQuery实现ListBox上移,下移,左移,右移操作功能示例
May 31 jQuery
解决node终端下运行js文件不支持ES6语法
Apr 04 Javascript
js实现简单贪吃蛇游戏
May 15 Javascript
JavaScript动画实例之粒子文本的实现方法详解
Jul 28 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 array_flip() 删除重复数组元素专用函数
2010/05/16 PHP
对YUI扩展的Gird组件 Part-1
2007/03/10 Javascript
北京奥运官方网站幻灯切换效果flash版打包下载
2008/01/30 Javascript
jquery中 $.expr使用实例介绍
2014/06/09 Javascript
Javascript动画效果(1)
2016/10/11 Javascript
Vue2.0中集成UEditor富文本编辑器的方法
2018/03/03 Javascript
JavaScript中使用import 和require打包后实现原理分析
2018/03/07 Javascript
vue实现个人信息查看和密码修改功能
2018/05/06 Javascript
详解如何使用webpack打包JS
2018/06/21 Javascript
使用Node搭建reactSSR服务端渲染架构
2018/08/30 Javascript
uni-app使用微信小程序云函数的步骤示例
2020/05/22 Javascript
Python实现动态添加类的属性或成员函数的解决方法
2014/07/16 Python
使用django-suit为django 1.7 admin后台添加模板
2014/11/18 Python
Python selenium 三种等待方式详解(必会)
2016/09/15 Python
python数据类型_元组、字典常用操作方法(介绍)
2017/05/30 Python
python kmeans聚类简单介绍和实现代码
2018/02/23 Python
python实现批量图片格式转换
2020/06/16 Python
Django-Rest-Framework 权限管理源码浅析(小结)
2018/11/12 Python
python继承threading.Thread实现有返回值的子类实例
2020/05/02 Python
完美解决python针对hdfs上传和下载的问题
2020/06/05 Python
Python计算信息熵实例
2020/06/18 Python
基于python实现复制文件并重命名
2020/09/16 Python
纯CSS实现的大小渐变、渐远效果
2014/04/15 HTML / CSS
Html+Css+Jquery实现左侧滑动拉伸导航菜单栏的示例代码
2020/03/17 HTML / CSS
Stylenanda中文站:韩国一线网络服装品牌
2016/12/22 全球购物
Steve Madden官网:美国鞋类品牌
2017/01/29 全球购物
Dyson戴森波兰官网:Dyson.pl
2019/08/05 全球购物
UNIX特点都有哪些
2016/04/05 面试题
《雨霖铃》听课反思
2014/02/13 职场文书
口才训练演讲稿范文
2014/09/16 职场文书
校本课程教学计划
2015/01/19 职场文书
大学生国家助学金感谢信
2015/01/23 职场文书
交通事故案件代理词
2015/05/23 职场文书
2015年中学图书馆工作总结
2015/07/22 职场文书
golang内置函数len的小技巧
2021/07/25 Golang
CSS3实现指纹特效代码
2022/03/17 HTML / CSS