iframe高度自適應(yīng)的6個(gè)方法

自適應(yīng)高度浮驳,其實(shí)就是設(shè)置iframe的高度悍汛,使其等于內(nèi)嵌網(wǎng)頁(yè)的高度,從而看不出來(lái)滾動(dòng)條和嵌套痕跡至会。對(duì)于用戶體驗(yàn)和網(wǎng)站美觀起著重要作用离咐。

如果內(nèi)容是固定的,那么我們可以通過(guò)CSS來(lái)給它直接定義一個(gè)高度奉件,同樣可以實(shí)現(xiàn)上面的需求宵蛀。當(dāng)內(nèi)容是未知或者是變化的時(shí)候。這個(gè)時(shí)候又有幾種情況了县貌。

iframe內(nèi)容未知术陶,高度可預(yù)測(cè)

這個(gè)時(shí)候,我們可以給它添加一個(gè)默認(rèn)的CSS的min-height值煤痕,然后同時(shí)使用JavaScript改變高度梧宫。常用的兼容代碼有:

// document.domain = "caibaojian.com";

function setIframeHeight(iframe) {

if (iframe) {

var iframeWin = iframe.contentWindow || iframe.contentDocument.parentWindow;

if (iframeWin.document.body) {

iframe.height = iframeWin.document.documentElement.scrollHeight || iframeWin.document.body.scrollHeight;

}

}

};

window.onload = function () {

setIframeHeight(document.getElementById('external-frame'));

};


如果在同個(gè)頂級(jí)域名下接谨,不同子域名之間互通信息,設(shè)置document.domain="caibaojian.com"·

只要修改以上的iframe的ID即可了塘匣∨Ш溃或者你可以直接在iframe里面寫代碼,我們一般為了不污染HTML代碼忌卤,建議使用上面的代碼扫夜。

多個(gè)iframe的情況下

//輸入你希望根據(jù)頁(yè)面高度自動(dòng)調(diào)整高度的iframe的名稱的列表

//用逗號(hào)把每個(gè)iframe的ID分隔. 例如: ["myframe1", "myframe2"],可以只有一個(gè)窗體驰徊,則不用逗號(hào)笤闯。

//定義iframe的ID

var iframeids=["test"];

//如果用戶的瀏覽器不支持iframe是否將iframe隱藏 yes 表示隱藏,no表示不隱藏

var iframehide="yes";

function dyniframesize()

{

var dyniframe=new Array()

for (i=0; i

{

if (document.getElementById)

{

//自動(dòng)調(diào)整iframe高度

dyniframe[dyniframe.length] = document.getElementById(iframeids[i]);

if (dyniframe[i] && !window.opera)

{

dyniframe[i].style.display="block";

if (dyniframe[i].contentDocument && dyniframe[i].contentDocument.body.offsetHeight) //如果用戶的瀏覽器是NetScape

dyniframe[i].height = dyniframe[i].contentDocument.body.offsetHeight;

else if (dyniframe[i].Document && dyniframe[i].Document.body.scrollHeight) //如果用戶的瀏覽器是IE

dyniframe[i].height = dyniframe[i].Document.body.scrollHeight;

}

}

//根據(jù)設(shè)定的參數(shù)來(lái)處理不支持iframe的瀏覽器的顯示問(wèn)題

if ((document.all || document.getElementById) && iframehide=="no")

{

var tempobj=document.all? document.all[iframeids[i]] : document.getElementById(iframeids[i]);

tempobj.style.display="block";

}

}

}

if (window.addEventListener)

window.addEventListener("load", dyniframesize, false);

else if (window.attachEvent)

window.attachEvent("onload", dyniframesize);

else

window.onload=dyniframesize;


針對(duì)知道的iframe的ID調(diào)用

function iframeAutoFit(iframeObj){

setTimeout(function(){if(!iframeObj) return;iframeObj.height=(iframeObj.Document?iframeObj.Document.body.scrollHeight:iframeObj.contentDocument.body.offsetHeight);},200)

}

內(nèi)容寬度變化的iframe高度自適應(yīng)

function reinitIframe(){

var iframe = document.getElementById("test");

try{

var bHeight = iframe.contentWindow.document.body.scrollHeight;

var dHeight = iframe.contentWindow.document.documentElement.scrollHeight;

var height = Math.max(bHeight, dHeight);

iframe.height = height;

console.log(height);

}catch (ex){}

}

window.setInterval("reinitIframe()", 200);

演示五

打開調(diào)試運(yùn)行窗口可以看到運(yùn)行棍厂。

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

跨域的時(shí)候颗味,由于js的同源策略,父頁(yè)面內(nèi)的js不能獲取到iframe頁(yè)面的高度勋桶。需要一個(gè)頁(yè)面來(lái)做代理脱衙。

方法如下:假設(shè)www.a.com下的一個(gè)頁(yè)面a.html要包含www.b.com下的一個(gè)頁(yè)面c.html。

我們使用www.a.com下的另一個(gè)頁(yè)面agent.html來(lái)做代理例驹,通過(guò)它獲取iframe頁(yè)面的高度,并設(shè)定iframe元素的高度退唠。

a.html中包含iframe:

在c.html中加入如下代碼:

//code from http://caibaojian.com/iframe-adjust-content-height.html

(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; ?// 這里通過(guò)hash傳遞b.htm的寬高

})();

最后鹃锈,agent.html中放入一段js:

var b_iframe = window.parent.parent.document.getElementById("Iframe");

var hash_url = window.location.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;

}

agent.html從URL中獲得寬度值和高度值,并設(shè)置iframe的高度和寬度(因?yàn)閍gent.html在www.a.com下瞧预,所以操作a.html時(shí)不受JavaScript的同源限制)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末屎债,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子垢油,更是在濱河造成了極大的恐慌盆驹,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,104評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件滩愁,死亡現(xiàn)場(chǎng)離奇詭異躯喇,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)硝枉,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門廉丽,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人妻味,你說(shuō)我怎么就攤上這事正压。” “怎么了责球?”我有些...
    開封第一講書人閱讀 168,697評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵焦履,是天一觀的道長(zhǎng)拓劝。 經(jīng)常有香客問(wèn)我,道長(zhǎng)嘉裤,這世上最難降的妖魔是什么凿将? 我笑而不...
    開封第一講書人閱讀 59,836評(píng)論 1 298
  • 正文 為了忘掉前任,我火速辦了婚禮价脾,結(jié)果婚禮上牧抵,老公的妹妹穿的比我還像新娘。我一直安慰自己侨把,他們只是感情好犀变,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,851評(píng)論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著秋柄,像睡著了一般获枝。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上骇笔,一...
    開封第一講書人閱讀 52,441評(píng)論 1 310
  • 那天省店,我揣著相機(jī)與錄音,去河邊找鬼笨触。 笑死懦傍,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的芦劣。 我是一名探鬼主播粗俱,決...
    沈念sama閱讀 40,992評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼虚吟!你這毒婦竟也來(lái)了寸认?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,899評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤串慰,失蹤者是張志新(化名)和其女友劉穎偏塞,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體邦鲫,經(jīng)...
    沈念sama閱讀 46,457評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡灸叼,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,529評(píng)論 3 341
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了掂碱。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片怜姿。...
    茶點(diǎn)故事閱讀 40,664評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖疼燥,靈堂內(nèi)的尸體忽然破棺而出沧卢,到底是詐尸還是另有隱情,我是刑警寧澤醉者,帶...
    沈念sama閱讀 36,346評(píng)論 5 350
  • 正文 年R本政府宣布但狭,位于F島的核電站披诗,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏立磁。R本人自食惡果不足惜呈队,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,025評(píng)論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望唱歧。 院中可真熱鬧宪摧,春花似錦、人聲如沸颅崩。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,511評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)沿后。三九已至沿彭,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間尖滚,已是汗流浹背喉刘。 一陣腳步聲響...
    開封第一講書人閱讀 33,611評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留漆弄,地道東北人睦裳。 一個(gè)月前我還...
    沈念sama閱讀 49,081評(píng)論 3 377
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像置逻,于是被迫代替她去往敵國(guó)和親推沸。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,675評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容

  • Window和document對(duì)象的區(qū)別 window對(duì)象window對(duì)象表示瀏覽器中打開的窗口window對(duì)象是...
    FConfidence閱讀 2,211評(píng)論 0 5
  • 事件源對(duì)象 event.srcElement.tagName event.srcElement.type 捕獲釋放...
    孤魂草閱讀 890評(píng)論 0 0
  • 以下是常用的代碼收集券坞,學(xué)習(xí)用。轉(zhuǎn)自豪情博客園 1. PC - js 返回指定范圍的隨機(jī)數(shù)(m-n之間)的公式 re...
    自由加咖啡閱讀 1,001評(píng)論 0 1
  • 就一件事肺素,同傳和AI恨锚。 我一直認(rèn)為,一個(gè)翻譯是很偉大的倍靡,當(dāng)然這不是我小時(shí)候以為的猴伶,要同時(shí)精通兩門以上的語(yǔ)言的厲害人...
    程十昔閱讀 568評(píng)論 11 7
  • 1.《身體知道答案》 作者:武志紅 以前我是一個(gè)活在頭腦與理性的人,我很少會(huì)去關(guān)注自己的身體和感受塌西,《身體知道...
    王亞妮閱讀 1,213評(píng)論 8 20