最近一个项目上,会用到调用iframe里面的方法,开始只调用第一个iframe里面的方法,这个比较简单,直接根据iframe ID找到 iframe页面再去找方法,调用就好了。
如下:
//执行iframe中函数 var doIFrameFunc = function (v_mymethod, v_params, v_frmName) { if (document.getElementById(v_frmName)) { var fn = document.getElementById(v_frmName).contentWindow[v_mymethod]; if (fn) { if (v_params == null) return fn(); else { return fn.apply(this, v_params); } } return null; } }
可是一旦有个两层iframe或者更多层的话,这个方法就调用不到了,所以网上搜了一下相关的方法,参考了 《iframe多层嵌套时获取元素》这篇文章之后把这个方法修改了一点。
//执行iframe中函数 var doIFrameFunc = function (v_mymethod, v_params, v_frmName) { if (document.getElementById(v_frmName)) { var fn = document.getElementById(v_frmName).contentWindow[v_mymethod]; if (fn) { if (v_params == null) return fn(); else { return fn.apply(this, v_params); } } else { var f_Iframe = document.getElementById(v_frmName).contentWindow; doIfraneFuncRecursion(v_params, v_mymethod, f_Iframe); } return null; } } // 递归获取方法 var doIfraneFuncRecursion = function (v_params, v_mymethod, f_Iframe) { if (f_Iframe == undefined) { return; } v_fn = f_Iframe.window.frames[0][v_mymethod]; if (v_fn) { if (v_params == null) return v_fn(); else { return v_fn.apply(this, v_params); } } else{ f_Iframe = f_Iframe.window.frames[0].contentWindow; doIfraneFuncRecursion(v_params,v_mymethod,f_Iframe) } }
当前iframe找不到方法的时候,就找这个iframe中是不是还嵌套有iframe,有的话去查下一个iframe,直到查到需要调用的方法或者查到没有iframe为止。诶第一次写博客,总感觉语言上有些问题。