首页 > 语言 > JavaScript > 正文

javascript实现网页子页面遍历回调的方法(涉及 window.frames、递归函数、函数上下文)

2024-05-06 16:23:53
字体:
来源:转载
供稿:网友

这篇文章主要介绍了javascript实现网页子页面遍历回调的方法(涉及 window.frames、递归函数、函数上下文),涉及javascript回调、遍历等实现技巧,需要的朋友可以参考下

本文实例讲述了javascript实现网页子页面遍历回调的方法(涉及 window.frames、递归函数、函数上下文)。分享给大家供大家参考。具体如下:

提炼于本人手写的纯 JavaScript 工具程序,用于遍历当前网页的所有子页面 并执行迭代回调,且回调函数返回值可用于结果回传,有助于减少闭包变量~

其特点在于 —— 递归遍历时只检索子页面的 Window 对象,不立即执行回调函数,而是在检索结束后在普通循环结构中回调。这样可以尽量减少 递归调用时的内存消耗,也简化了程序结构,易于维护

全局函数 Frame_Each( CallBack ):

 

 
  1. (function (BOM) { 
  2. function All_Frames(iWindow) { 
  3. var _Frames_ = [].slice.call(iWindow.frames, 0); 
  4. for (var i = 0; i < _Frames_.length; i++) 
  5. _Frames_ = _Frames_.concat( arguments.callee(_Frames_[i]) ); 
  6. return _Frames_; 
  7. BOM.Frame_Each = function (CallBack) { 
  8. var Frames = [this].concat( All_Frames(this) ); 
  9. if (! CallBack) return Frames; 
  10. for (var i = 0, CBR; i < Frames.length; i++) { 
  11. try { Frames[i].name; } catch (iError) { continue; } 
  12. CBR = CallBack.apply(Frames[i], [].slice.call(arguments, 1)); 
  13. if (CBR === falsebreak
  14. else if (CBR === undefined) continue
  15. return CBR; 
  16. }; 
  17. })(self); 

使用示例:

 

 
  1. // 无参数 —— 返回一个数组,包含函数调用所在的 Window 对象及其子页面的 Window,其顺序同递归遍历 
  2. var Pages = Frame_Each(); 
  3. console.log( Pages.length ); 
  4. // 定义回调 —— 回调返回值功能与普通循环语句的对应: 
  5. // 1. undefined:continue 
  6. // 2. false:break 
  7. // 3. 其它任何值:break && return Value 
  8. var Search_Result = Frame_Each(function () { 
  9. var iFocus = this.document.activeElement; 
  10. switch ( iFocus.tagName.toLowerCase() ) { 
  11. case 'body'return false
  12. case 'iframe'return
  13. return iFocus; 
  14. }); 
  15. Search_Result.innerHTML = 'Hello, Focus!'

希望本文所述对大家的javascript程序设计有所帮助。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

图片精选