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数组处理方法汇总
Jun 20 Javascript
Jquery倒数计时按钮setTimeout的实例代码
Jul 04 Javascript
简单漂亮的js弹窗可自由拖拽且兼容大部分浏览器
Oct 22 Javascript
页面定时刷新(1秒刷新一次)
Nov 22 Javascript
JS动态修改iframe高度和宽度的方法
Apr 01 Javascript
Bootstrap表单布局
Jul 19 Javascript
微信小程序之绑定点击事件实例详解
Jul 07 Javascript
JavaScript登录验证基础教程
Nov 01 Javascript
浅谈VueJS SSR 后端绘制内存泄漏的相关解决经验
Dec 20 Javascript
详解js创建对象的几种方法及继承
Apr 12 Javascript
小程序云开发教程如何使用云函数实现点赞功能
May 18 Javascript
JavaScript简易计算器制作
Jan 17 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简单图像创建入门实例
2015/06/10 PHP
获取JavaScript用户自定义类的类名称的代码
2007/03/08 Javascript
js复制网页内容并兼容各主流浏览器的代码
2013/12/17 Javascript
SeaJS入门教程系列之SeaJS介绍(一)
2014/03/03 Javascript
javascript 动态创建表格
2015/01/08 Javascript
html的DOM中document对象images集合用法实例
2015/01/21 Javascript
js代码实现无缝滚动(文字和图片)
2015/08/20 Javascript
NodeJs——入门必看攻略
2016/06/27 NodeJs
详解有关easyUI的拖动操作中droppable,draggable用法例子
2017/06/03 Javascript
JS+HTML5实现图片在线预览功能
2017/07/22 Javascript
webpack搭建vue 项目的步骤
2017/12/27 Javascript
vue  elementUI 表单嵌套验证的实例代码
2019/11/06 Javascript
微信小程序实现时间戳格式转换
2020/07/20 Javascript
vue打开其他项目页面并传入数据详解
2020/11/25 Vue.js
[56:45]DOTA2上海特级锦标赛D组小组赛#1 EG VS COL第一局
2016/02/28 DOTA
python中使用pyhook实现键盘监控的例子
2014/07/18 Python
对于Python的Django框架部署的一些建议
2015/04/09 Python
python计算圆周率pi的方法
2015/07/11 Python
Python有序字典简单实现方法示例
2017/09/28 Python
CSS3实现银灰色动画效果的导航菜单代码
2015/09/01 HTML / CSS
使用 CSS3 中@media 实现网页自适应的示例代码
2020/03/24 HTML / CSS
美国领先的礼品卡网站:GiftCards.com
2016/11/02 全球购物
JD Sports法国:英国篮球和运动时尚的领导者
2017/09/28 全球购物
什么是事务?事务有哪些性质?
2012/03/11 面试题
青春奉献演讲稿
2014/05/08 职场文书
美德少年事迹材料500字
2014/08/19 职场文书
大学毕业生管理学求职信
2014/09/01 职场文书
标准单位租车协议书
2014/09/23 职场文书
部队反四风对照检查材料
2014/09/26 职场文书
党员个人批评与自我批评
2014/10/14 职场文书
狮子林导游词
2015/02/03 职场文书
北京英文导游词
2015/02/12 职场文书
2015年医德考评自我评价
2015/03/03 职场文书
人事任命通知
2015/04/20 职场文书
卫生院艾滋病宣传活动总结
2015/05/09 职场文书
MySQL 8.0 Online DDL快速加列的相关总结
2021/06/02 MySQL