最近一個項目上,會用到調用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為止。誒第一次寫博客,總感覺語言上有些問題。