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 urldecode URL解码的问题
Jan 08 Javascript
JavaScript面向对象(极简主义法minimalist approach)
Jul 17 Javascript
怎样在JavaScript里写一个swing把数据插入数据库
Dec 10 Javascript
解析jquery中的ajax缓存问题
Dec 19 Javascript
Javascript中replace()小结
Sep 30 Javascript
jquery+json实现动态商品内容展示的方法
Jan 14 Javascript
less简单入门(CSS 预处理语言)
Mar 08 Javascript
webstorm+vue初始化项目的方法
Oct 18 Javascript
vue + element-ui的分页问题实现
Dec 17 Javascript
通过jQuery学习js类型判断的技巧
May 27 jQuery
JS原型prototype和__proto__用法实例分析
Mar 14 Javascript
详解JS数组方法
Nov 20 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图片验证码实例
2014/03/21 PHP
php通过两层过滤获取留言内容的方法
2016/07/11 PHP
Yii框架使用PHPExcel导出Excel文件的方法分析【改进版】
2019/07/24 PHP
单独使用CKFinder选择图片的方法
2010/08/21 Javascript
JavaScript作用域链使用介绍
2013/08/29 Javascript
jQuery 插件开发指南
2014/11/14 Javascript
如何动态加载外部Javascript文件
2015/12/02 Javascript
Bootstrap网格系统详解
2016/04/26 Javascript
jQuery EasyUI基础教程之EasyUI常用组件(推荐)
2016/07/15 Javascript
微信小程序网络请求的封装与填坑之路
2017/04/01 Javascript
微信小程序图片横向左右滑动案例
2017/05/19 Javascript
jQuery获取所有父级元素及同级元素及子元素的方法(推荐)
2018/01/21 jQuery
jquery点击回车键实现登录效果并默认焦点的方法
2018/03/09 jQuery
jQuery实现获取动态添加的标签对象示例
2018/06/28 jQuery
Vue动态面包屑功能的实现方法
2019/07/01 Javascript
Vue使用Three.js加载glTF模型的方法详解
2020/06/14 Javascript
全面理解Python中self的用法
2016/06/04 Python
详解Python中类的定义与使用
2017/04/11 Python
修改python plot折线图的坐标轴刻度方法
2018/12/13 Python
python如何解析配置文件并应用到项目中
2019/06/27 Python
Python抓新型冠状病毒肺炎疫情数据并绘制全国疫情分布的代码实例
2020/02/05 Python
Matlab中plot基本用法的具体使用
2020/07/17 Python
python实现图像随机裁剪的示例代码
2020/12/10 Python
使用CSS3实现字体颜色渐变的实现
2020/08/10 HTML / CSS
美国知名玩具品牌:Melissa & Doug
2016/08/16 全球购物
Intimissimi德国网上商店:意大利知名内衣品牌
2018/04/03 全球购物
建筑公司文秘岗位职责
2013/11/29 职场文书
公司办公室岗位职责
2014/03/19 职场文书
小学教师评语大全
2014/04/23 职场文书
2014世界杯球队球队口号
2014/06/05 职场文书
师德师风剖析材料
2014/09/30 职场文书
银行贷款委托书范本
2014/10/11 职场文书
预防艾滋病宣传活动总结
2015/05/09 职场文书
python数据可视化JupyterLab实用扩展程序Mito
2021/11/20 Python
SQL Server携程核心系统无感迁移到MySQL实战
2022/06/01 SQL Server
Spring Cloud OAuth2实现自定义token返回格式
2022/06/25 Java/Android