iframe中跨域載入頁面,在父級頁面由于跨域的限制是訪問不了加載頁面的window對象,也就調(diào)用不了子頁面中聲明的函數(shù)。
因此在父級頁面中判斷iframe是否載入完畢最初的方式是使用參照元素載入完成的方式:
代碼如下 | |
var loginiframe = document.createElement("iframe"); loginiframe.src = "http://login.hxsd.com/"; loginiframe.onload = function(){ alert("load"); } document.body.appendChild(loginiframe); |
但是上面這種方式在ie瀏覽器下在loginiframe加載完成后卻沒有響應(yīng),對ie瀏覽器做了其他的處理:
代碼如下 | |
var isIE = navigator.userAgent.toLowerCase().indexOf("msie") > -1; var loginiframe = document.createElement("iframe"); loginiframe.src = "http://login.hxsd.com/"; if (isIE){ loginiframe.onreadystatechange = function(){ if (loginiframe.readyState == "complete"){ alert("load"); } }; } else { loginiframe.onload = function(){ alert("load"); }; } document.body.appendChild(loginiframe); |
問題解決后,通過閱讀《Iframes, onload, and document.domain》,在IE下對于iframe的onload的支持是隱性的,最終解決方式:
代碼如下 | |
var loginiframe = document.createElement("iframe"); |
下面是介紹載入完成后使iframe高度自適應(yīng)
具體的實現(xiàn)代碼如下:
代碼如下 | |
function loadFrame(oFrame, sFrameSrc) { |
以上方法只適用于同域的鏈接,在iframe內(nèi)的內(nèi)容加載完成后會獲取iframe內(nèi)的高度賦值給iframe的高度
對于跨域的情況,由于瀏覽器安全性的設(shè)置,不同域的頁面之間是不能通信的,解決的方法是需要通過在iframe調(diào)用的頁面中構(gòu)建一個與父級頁面同域的頁面,通過url的形式將子頁面的高度傳遞過去,具體代碼如下:
子頁面中:
代碼如下 | |
window.onload = function() { 代 |
理頁面中:
代碼如下 | |
var nHeight = location.href.match(/?height=(d+)$/)[1]; window.top.document.getElementById("frame").height = nHeight; |
其中window.top為調(diào)用的最頂層窗口