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 相关文章推荐
推荐dojo学习笔记
Mar 24 Javascript
JavaScript 操作键盘的Enter事件(键盘任何事件),兼容多浏览器
Oct 11 Javascript
JQuery 拾色器插件发布-jquery.icolor.js
Oct 20 Javascript
非主流的textarea自增长实现js代码
Dec 20 Javascript
你必须知道的JavaScript 变量命名规则详解
May 07 Javascript
Node.js 服务器端应用开发框架 -- Hapi.js
Jul 29 Javascript
浅谈JavaScript Date日期和时间对象
Dec 29 Javascript
jQuery实现固定在网页顶部的菜单效果代码
Sep 02 Javascript
基于javascript实现浏览器滚动条快到底部时自动加载数据
Nov 30 Javascript
JavaScript获取对象在页面中位置坐标的方法
Feb 03 Javascript
jQuery学习笔记之回调函数
Aug 15 Javascript
JavaScript实现计算多边形质心的方法示例
Jan 31 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文本操作类
2006/11/25 PHP
ThinkPHP缓存方法S()概述
2014/06/13 PHP
thinkphp缓存技术详解
2014/12/09 PHP
ThinkPHP里用U方法调用js文件实例
2015/06/18 PHP
详解YII关联查询
2016/01/10 PHP
Zend Framework动作助手FlashMessenger用法详解
2016/03/05 PHP
微信支付之JSAPI公众号支付详解
2019/05/15 PHP
[原创]PHP global全局变量经典应用与注意事项分析【附$GLOBALS用法对比】
2019/07/12 PHP
Autocomplete Textbox Example javascript实现自动完成成功
2007/08/17 Javascript
jquery 选择器部分整理
2009/10/28 Javascript
图片img的src不变让浏览器重新加载实现方法
2013/03/29 Javascript
jquery实现简单的遮罩层
2016/01/08 Javascript
Ionic实现仿通讯录点击滑动及$ionicscrolldelegate使用分析
2016/01/18 Javascript
Vue实现typeahead组件功能(非常靠谱)
2017/08/26 Javascript
select获取下拉框的值 下拉框默认选中方法
2018/02/28 Javascript
Node.js进阶之核心模块https入门
2018/05/23 Javascript
vue init webpack 建vue项目报错的解决方法
2018/09/29 Javascript
vue将后台数据时间戳转换成日期格式
2019/07/31 Javascript
基于Express框架使用POST传递Form数据
2019/08/10 Javascript
python文件操作整理汇总
2014/10/21 Python
python获取本机mac地址和ip地址的方法
2015/04/29 Python
详解使用Python处理文件目录的相关方法
2015/10/16 Python
PyCharm 常用快捷键和设置方法
2017/12/20 Python
Python3实现的字典、列表和json对象互转功能示例
2018/05/22 Python
关于python字符串方法分类详解
2019/08/20 Python
使用 PyTorch 实现 MLP 并在 MNIST 数据集上验证方式
2020/01/08 Python
ansible-playbook实现自动部署KVM及安装python3的详细教程
2020/05/11 Python
Python configparser模块常用方法解析
2020/05/22 Python
HTML5之SVG 2D入门2—图形绘制(基本形状)介绍及使用
2013/01/30 HTML / CSS
eBay澳大利亚站:eBay.com.au
2018/02/02 全球购物
Contém1g官网:巴西彩妆品牌
2020/01/17 全球购物
校本教研工作制度
2014/01/22 职场文书
服装电子商务创业计划书
2014/01/30 职场文书
学校领导班子对照检查材料
2014/09/24 职场文书
MySql开发之自动同步表结构
2021/05/28 MySQL
关于python爬虫应用urllib库作用分析
2021/09/04 Python