綠色資(zī)源網:您身邊最(zuì)放心的安全(quán)下載(zǎi)站! 最新軟件|熱門排行|軟件分(fèn)類|軟件專題|廠商大(dà)全

綠色資源網

技術教程
您的位(wèi)置:首頁網頁設(shè)計HTML/CSS → iframe 高度(dù)設置、iframe 自適(shì)應高度方法總結(jié)

iframe 高度(dù)設(shè)置、iframe 自適應高度方(fāng)法總結

我要評(píng)論 2014/04/07 13:50:35 來源:綠色資源(yuán)網(wǎng) 編輯(jí):www.chithemodel.com [ 小(xiǎo)] 評論:0 點擊:310次

謂iframe自(zì)適應高度,就是,基於界麵美觀和(hé)交互(hù)的考(kǎo)慮,隱藏(cáng)了iframe的border和scrollbar,讓(ràng)人看不出它是個iframe。如果iframe始(shǐ)終調(diào)用同一個固定高度(dù)的(de)頁(yè)麵,我們直接寫死(sǐ)iframe高(gāo)度就(jiù)可以了。而如果iframe要切換頁麵,或(huò)者被(bèi)包含頁麵要做(zuò)DOM動(dòng)態操(cāo)作,這時候,就(jiù)需要程序去同步(bù)iframe高度和被包含頁的實際高度了(le)。

如果(guǒ)iframe的高(gāo)度沒有確(què)定(dìng),那將(jiāng)是初始的高度(dù)。
iframe是網頁中的一(yī)部(bù)分,其大小(xiǎo)還要受到網頁(yè)的限製,設(shè)置最高可以使用height="100%"。
基本上解決iframe超出(chū)的高度都是增加了滾動條(tiáo)來(lái)實現的,很簡單,如果(guǒ)你iframe中的信息超出了一屏幕,你就必(bì)須使用滾動條(tiáo)了。

開(kāi)始(shǐ)用(yòng)的(de)時候還不行,後來發現是(shì)因為js跨域問題(tí),沒有權限。後來設(shè)置了window.document.domain 就(jiù)可以(yǐ)了,用的(de)是jquery代碼2方法。

跨域下的iframe自適應(yīng)高(gāo)度

跨域的時候,由(yóu)於js的同源策略,父頁麵內的js不能獲取到(dào)iframe頁麵的高度。需要一個頁麵來做代理(lǐ)。
方法如下:假設(shè)www.a.com下的(de)一個(gè)頁麵a.html要包含(hán)www.b.com下(xià)的一個頁麵c.html。
我們使用www.a.com下的另一個頁麵agent.html來(lái)做代理,通(tōng)過它獲取iframe頁麵的高(gāo)度,並設定iframe元素(sù)的高度。

a.html中包含iframe:
<iframe src="http://www.b.com/c.html" id="Iframe" frameborder="0" scrolling="no" style="border:0px;"></iframe>

在c.html中加(jiā)入如下代(dài)碼:
<iframe id="c_iframe"  height="0" width="0"  src="http://www.a.com/agent.html" style="display:none" ></iframe>
<script type="text/javascript">
    (function autoHeight(){
        var b_width = Math.max(document.body.scrollWidth,document.body.clientWidth);
        var b_height = Math.max(document.body.scrollHeight,document.body.clientHeight);
        var c_iframe = document.getElementById("c_iframe");
        c_iframe.src = c_iframe.src+"#"+b_width+"|"+b_height; 
    })();
</script>

最後,agent.html中放入(rù)一段js:
<script type="text/javascript">
    var b_iframe = window.parent.parent.document.getElementById("Iframe");
    var hash_url = window.locations.hash;
    if(hash_url.indexOf("#")>=0){
        var hash_width = hash_url.split("#")[1].split("|")[0]+"px";
        var hash_height = hash_url.split("#")[1].split("|")[1]+"px";
        b_iframe.style.width = hash_width;
        b_iframe.style.height = hash_height;
    }
</script>
agent.html從URL中獲得寬度值和高度值,並(bìng)設置iframe的高度和寬度(因為agent.html在www.a.com下,所(suǒ)以操作a.html時不受JavaScript的同源限製)

超級簡單的方法,也不(bú)用寫什麽判斷瀏覽器高度、寬度(dù)啥(shá)的。
下麵的兩種方(fāng)法自(zì)選其一就行了。一個是(shì)放在和iframe同頁麵的(de),一個是放在(zài)test.html頁麵的。
注意別(bié)放錯地方了哦(ò)。

下(xià)麵是(shì)其他兩種(zhǒng)方法:
iframe代碼,注意要寫ID

<iframe src="test.html" id="main" width="700" height="300" frameborder="0" scrolling="auto"></iframe>

jquery代碼1:

//注意(yì):下麵的代碼(mǎ)是放在test.html調用
$(window.parent.document).find("#main").load(function(){
var main = $(window.parent.document).find("#main");
var thisheight = $(document).height()+30;
main.height(thisheight);
});

jquery代碼2:

//注意:下(xià)麵(miàn)的(de)代碼(mǎ)是放在(zài)和(hé)iframe同一個頁麵調用(yòng)
$("#main").load(function(){
var mainheight = $(this).contents().find("body").height()+30;
$(this).height(mainheight);
}); 

第二種有效,不過要注意一(yī)點(diǎn)是,增加(jiā)的JS要寫在iframe下麵,放(fàng)在(zài)頭部是測試沒有效果。
測試代碼:
<iframe id="mainframe" name="mainframe" marginwidth="0" marginheight="0" src="/Home/Activitylist" frameborder="0" width="100%" scrolling="no" height="100%"></iframe>
<script type="text/javascript">
//注意:下(xià)麵的代碼是放在(zài)和iframe同(tóng)一個頁麵調(diào)用(yòng),放在iframe下麵
$("#mainframe").load(function () {
var mainheight = $(this).contents().find("body").height() + 30;
 $(this).height(mainheight);
});
</script>

關鍵(jiàn)詞:iframe

閱(yuè)讀本文後您有什麽感想? 已有 人(rén)給出評價(jià)!

  • 2 歡迎喜歡
  • 2 白癡
  • 2 拜(bài)托(tuō)
  • 2 哇
  • 2 加油
  • 2 鄙視