1. 程式人生 > >iframe高度自適應的6個方法

iframe高度自適應的6個方法

原文連結:http://caibaojian.com/iframe-adjust-content-height.html

JS自適應高度,其實就是設定的高度,使其等於內嵌網頁的高度,從而看不出來滾動條和巢狀痕跡。對於使用者體驗和網站美觀起著重要作用。

如果內容是固定的,那麼我們可以通過CSS來給它直接定義一個高度,同樣可以實現上面的需求。當內容是未知或者是變化的時候。這個時候又有幾種情況了。

內容未知,高度可預測

這個時候,我們可以給它新增一個預設的CSS的min-height值,然後同時使用改變高度。常用的相容程式碼有:


// 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'));
};

演示地址

演示一(如果在同個頂級域名下,不同子域名之間互通訊息,設定document.domain="caibaojian.com"·

只要修改以上的的ID即可了。或者你可以直接在iframe裡面寫程式碼,我們一般為了不汙染HTML程式碼,建議使用上面的程式碼。

<iframe src="backtop.html" frameborder="0" scrolling="no" id="external-frame" onload="setIframeHeight(this)"></iframe>

演示二

多個iframe的情況下

<script language="javascript">
//輸入你希望根據頁面高度自動調整高度的iframe的名稱的列表
//用逗號把每個iframe的ID分隔. 例如: ["myframe1", "myframe2"],可以只有一個窗體,則不用逗號。
//定義iframe的ID
var iframeids=["test"];
//如果使用者的瀏覽器不支援iframe是否將iframe隱藏 yes 表示隱藏,no表示不隱藏
var iframehide="yes";
function dyniframesize()
{
var dyniframe=new Array()
for (i=0; i<iframeids.length; i++)
{
if (document.getElementById)
{
//自動調整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;
}
}
//根據設定的引數來處理不支援iframe的瀏覽器的顯示問題
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;
</script>

演示三

針對知道的iframe的ID呼叫

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

演示四

內容寬度變化的iframe高度自適應

//code from http://caibaojian.com/iframe-adjust-content-height.html
<iframe src="backtop.html" frameborder="0" scrolling="no" id="test" onload="this.height=100"></iframe>
<script type="text/javascript">
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);
</script>

演示五

開啟除錯執行視窗可以看到執行。

跨域下的iframe自適應高度

跨域的時候,由於js的同源策略,父頁面內的js不能獲取到iframe頁面的高度。需要一個頁面來做代理。
方法如下:假設www.a.com下的一個頁面a.html要包含www.b.com下的一個頁面c.html。
我們使用www.a.com下的另一個頁面agent.html來做代理,通過它獲取iframe頁面的高度,並設定iframe元素的高度。

a.html中包含iframe:

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

在c.html中加入如下程式碼:

<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;  // 這裡通過hash傳遞b.htm的寬高
})();
</script>

最後,agent.html中放入一段js:

<script type="text/javascript">
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;
}
</script>

agent.html從URL中獲得寬度值和高度值,並設定iframe的高度和寬度(因為agent.html在www.a.com下,所以操作a.html時不受的同源限制)

演示六


來源:前端開發部落格

相關推薦

iframe高度適應6方法

原文連結:http://caibaojian.com/iframe-adjust-content-height.htmlJS自適應高度,其實就是設定的高度,使其等於內嵌網頁的高度,從而看不出來滾動條和巢狀痕跡。對於使用者體驗和網站美觀起著重要作用。 如果內容是固定的,那麼我

CSS完美實現iframe高度適應(支持跨域)

真的 高度 org lns nal aid .org bsp 方法 Iframe的強大功能偶就不多說了,它不但被開發人員經常運用,而且黑客們也常常使用它,總之用過的人知道它的強大之處,但是Iframe有個致命的“BUG”就是iframe的高度無法自動適應,這一點讓很多人都頭

iframe高度適應子頁面高度 使用onload屬性

sca height init window 屬性 fun frame var scroll <!DOCTYPE html> <html> <head> <title>測試</title> <

iframe高度適應

borde 16px div 後者 size 我們 第一次用 一次 edit   第一次用iframe標簽代替ajax異步刷新去做後天管理系統,發現iframe的確是個好東西。但有個最大的問題就是——高度不能自適應,要麽設置死,要麽用js去動態獲取目標資源body的heig

IE8,11的iframe高度適應

相容模式:function iFrameHeightTzinfo() { var ifm= document.getElementById("iframe_tzinfo");  //var subWeb = document.frames ? document.frames["ifra

CSS完美實現iframe高度適應(支援跨域)

Iframe的強大功能偶就不多說了,它不但被開發人員經常運用,而且黑客們也常常使用它,總之用過的人知道它的強大之處,但是Iframe有個致命的“BUG”就是iframe的高度無法自動適應,這一點讓很多人都頭疼萬分。百度或是谷歌一下,確實很多解決方法,但嘗試一下,會發現問題很多:瀏覽器相容性差,不能自

iframe高度適應頁面的高度

<div class="tpl-content-wrapper"> <iframe id="frameId" frameborder="0" scrolling="no" height="auto" src="" onLoad="iFrameHei

總結iframe高度適應適應子頁面高度

var browserVersion = window.navigator.userAgent.toUpperCase(); var isOpera = browserVersion.indexOf("OPERA") > -1 ? true : false; var isFireFox = brow

內容寬度變化的iframe高度適應

<iframe src="backtop.html" frameborder="0" scrolling="no" id="test" onload="this.height=100"></iframe> <script type="text/j

iframe高度適應問題

今天寫了一下html靜態頁,遇到iframe高度自適應問題。本來是使用bootstrap的,看它上面的文件說直接使用它們給好樣式就可以了。但是並沒有達到要的效果。 最後使用了這個中方法解決了。 <div class="col-lg-10 col-md-10">

自動載入的iframe高度適應

動態產生iframe,自動載入至body中,還有一個功能就是iframe的高度自適應,下面程式碼測試於IE和Firefox,Chrome: http://www.cnblogs.com/insus/p/3521418.html

Iframe 高度適應

沒有 border off right The style 需要 是否 開始 實現 iframe 的自適應高度,能夠隨著頁面的長度自動的適應以免除頁面和 iframe 同時出現滾動條的現象。 (需要只有iframe出現滾動條) 剛開始以為是很小的問題一直沒註意,但是經常頁

html iframe高度適應

() function Language nload ont The 有一種 sub scrip 想到的一種辦法是,在父頁面裏獲取子頁面的高度,在父頁面onlod裏把獲取到子頁面的高度賦值給父頁面iframe標簽,不過這種方法感覺不是很好,因為瀏覽器兼容性不好,獲取不到高度

iframe高度適應,取消滾動條

專案中碰到左側是一個列表,是固定定位,點選不同的列表選項右側引入不同的iframe地址檔案,但是iframe設定屬性的時候高度只識別px,設定百分百之類的都無效,並且不想要iframe本身的滾動條,頁面只需要一個預設的滾動條。實現效果如下圖:html程式碼:    <i

iframe高度適應、載入完成事件

高度自適應 ------------------------------------------------- 方法一: 經典程式碼 iFrame 自適應高度,在IE6/IE7/IE8/Firefox/Opera/Chrome/Safari通過測試。  只適用於同

iframe 裏的高度適應

|| 裏的 () iframe function document height 其他 pos 由於公司裏的很多東西都要用到iframe 導致我不得不各種百度 首先是自適應高度 // document.domain = "caibaojian.com"; fu

高度適應不能觸發transition的解決方法

cursor res else utf clas 行數 post 點擊 enter 1. 前言   在我們不能確定一個元素的高度的時候,要使用transition過渡,是不會觸發的,比如一個p標簽 內容行數不固定 我們可能就要初始 height: 0 ; 過渡到 he

css-兩div並排,左邊div寬固定,右邊適應 的解決方法

觸發 cal bfc order flex布局 one red splay CA <div class= "container"> <div class="left"></div> <div class="right"&

div裡巢狀iframe,設定iframe及div的高度適應

1. div+iframe <div class="main"> <iframe id="contentFrame" name="contentFrame" src="url" onload="javascript:reinitIframe(

iframe根據子介面高度適應的情況--子介面table非同步

iframe根據子介面高度自適應的情況--子介面table ajax非同步請求 最近筆者遇到一個問題,需要在後臺管理系統介面中右側區域iframe根據子介面的高度進行自適應.開始用的方法是這樣的 <iframe scrolling="no" framebo