javascript实现网页子页面遍历回调的方法(涉及 window.frames、递归函数、函数上下文)
本文实例讲述了javascript实现网页子页面遍历回调的方法(涉及window.frames、递归函数、函数上下文)。分享给大家供大家参考。具体如下:
提炼于本人手写的纯JavaScript工具程序,用于遍历当前网页的所有子页面并执行迭代回调,且回调函数返回值可用于结果回传,有助于减少闭包变量~
其特点在于——递归遍历时只检索子页面的Window对象,不立即执行回调函数,而是在检索结束后在普通循环结构中回调。这样可以尽量减少递归调用时的内存消耗,也简化了程序结构,易于维护
全局函数Frame_Each(CallBack):
(function(BOM){ functionAll_Frames(iWindow){ var_Frames_=[].slice.call(iWindow.frames,0); for(vari=0;i<_Frames_.length;i++) _Frames_=_Frames_.concat(arguments.callee(_Frames_[i])); return_Frames_; } BOM.Frame_Each=function(CallBack){ varFrames=[this].concat(All_Frames(this)); if(!CallBack)returnFrames; for(vari=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; elseif(CBR===undefined)continue; returnCBR; } }; })(self);
使用示例:
//无参数——返回一个数组,包含函数调用所在的Window对象及其子页面的Window,其顺序同递归遍历 varPages=Frame_Each(); console.log(Pages.length); //定义回调——回调返回值功能与普通循环语句的对应: //1.undefined:continue //2.false:break //3.其它任何值:break&&returnValue varSearch_Result=Frame_Each(function(){ variFocus=this.document.activeElement; switch(iFocus.tagName.toLowerCase()){ case'body':returnfalse; case'iframe':return; } returniFocus; }); Search_Result.innerHTML='Hello,Focus!';
希望本文所述对大家的javascript程序设计有所帮助。