從上面這個Demo可以看到,除IE瀏覽器外,別的瀏覽器計算出來的都是iframe的高度,即CSS里設置的#frame_content_parent{ height:1800px; }。而IE計算出來的是iframe所引用頁面的實際高度。
#frame_content_parent{ height:1800px; } (function(){ var $ = YAHOO.util.Dom, frame = $.get("frame_content_parent"); function reSetIframe(){ var frameContent = frame.contentWindow.document, bodyHeight = Math.max (frameContent.documentElement.scrollHeight, frameContent.body.scrollHeight); if (bodyHeight != $.getStyle(frame, "height")){ $.setStyle(frame, "height", bodyHeight + "px"); } } if(frame){ $.setStyle(frame,"height","auto"); setInterval(reSetIframe,300); } })();
跨域
這里提供一個Iframe代理的方法,簡單地說一下原理。假設有3個頁面,分別是主頁面A.html,字頁面B.html,代理頁面C.html。其中A與B是跨域的,而A和C是同域的。它們的關系:A包含B,B包含C。很顯然A和B,以及B和C,因為跨域不能相互通信,而A和C同域,可以相互通信。為此我們就想到讓C頁面告訴A頁面,B頁面到底有多少高。因為B和C也是跨域的不能相互通信,所以想在C頁面中,直接window.parent.document.body.scrollHeight這樣是行不通的,所以我們只能讓B頁面自己計算自身的高度,然后通過某種方法告訴C頁面,再由C頁面告訴A頁面。這里的一個方法就是在B頁面生成一個Iframe節(jié)點,然后設置它的src屬性,在這個地址上附加一個參數(shù),即B頁面計算出來的高度,然后C頁面就可以通過window.location獲取這個地址欄中的地址,提取出高度值,通過window.top找到A頁面,設置A頁面的Iframe的高度;镜脑砭褪沁@樣,看代碼吧:
DEMO
//B頁面腳本 //任務:計算其實際高度,然后生成一個iframe節(jié)點,將高度作為代理頁面C的地址的一部分賦值給Src屬性 (function(){ var agent_iframe = document.createElement("iframe"), b_height = Math.max(document.documentElement.scrollHeight,document.body.scrollHeight); agent_iframe.src = "http://demo.zhouqicf.com/js/2010/iframe_height/agent_iframe_once.html#" + b_height; document.body.appendChild(agent_iframe); agent_iframe.style.display = "none"; })();
//C頁面腳本 //任務:獲取請求地址中的高度值,將其賦值給A頁面的Iframe的高度 window.top.document.getElementById("frame_content_parent").height = parseInt(window.location.hash.substring(1),10);
出處:口碑網(wǎng)UED Team
責任編輯:bluehearts
上一頁 三談Iframe自適應高度 [1] 下一頁 三談Iframe自適應高度 [3]
◎進入論壇網(wǎng)頁制作、WEB標準化版塊參加討論,我還想發(fā)表評論。
|