IFrame跨域高度自適應(yīng)實(shí)現(xiàn)代碼
var iframeids = ['memberIndexIframe','inquiryCenterIframe','everychinaBbsIframe'];
var iframehide = "yes";
function dynIframeSize(){
var dyniframe = [];
for(var i=0;i<iframeids.length;i++){
if(!document.getElementById) return false;
dyniframe[i] = document.getElementById(iframeids[i]);
if(dyniframe[i] && !window.opera){
dyniframe[i].style.display = "block";
if(dyniframe[i].contentDocument && dyniframe[i].contentDocument.body.offsetHeight){
dyniframe[i].height = dyniframe[i].contentDocument.body.offsetHeight;
}else if(dyniframe[i].Document && dyniframe[i].Document.body.scrollHeight){
dyniframe[i].height = dyniframe[i].Document.body.scrollHeight;
}
}
if((document.all || document.getElement) && iframeids == "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ì)于上面的代碼直接保存一個(gè)文件iframe.js,然后引用即可
注意:這段代碼對(duì)于跨域的iframe引用不太適用,需要特別定義其iframe高度
下面這個(gè)代碼是跨域的iframe高度
項(xiàng)目網(wǎng)站中需要嵌入合作網(wǎng)站的頁(yè)面,這就需要頁(yè)面的自適應(yīng)高度變化,并且是跨域的。在網(wǎng)上看了許多資料,加上自己的實(shí)踐,終于實(shí)現(xiàn)了跨域的IFrame自適應(yīng)高度。如下:
首先,我的頁(yè)面a.html需要引入對(duì)方的b.html,在這里運(yùn)用iframe方式實(shí)現(xiàn)頁(yè)面的套用
a.html頁(yè)面的主要代碼如下:
<BODY>
<iframe width="100%" id="a_iframe" name="a_iframe" src="http://對(duì)方域名/b.html"
frameborder="no" border="0px" scrolling="no" allowtransparency="yes" ></iframe>
</BODY>
a.html頁(yè)面只是用來(lái)引入對(duì)方頁(yè)面的一個(gè)簡(jiǎn)單頁(yè)面 這就不多做介紹。
然后,最好在a.html同一級(jí)目錄下,創(chuàng)建一個(gè)agent.html頁(yè)面,該頁(yè)面用來(lái)得到對(duì)方通過(guò)js傳遞過(guò)來(lái)的參數(shù),
根據(jù)高度參數(shù)來(lái)調(diào)整a.html中的a_iframe的高度,主要代碼如下:
Js代碼
<script type="text/javascript">
//得到a.html中的a_iframe
var a_iframe = parent.parent.document.getElementById("a_iframe");
//<SPAN>location.hash用來(lái)獲取頁(yè)面的標(biāo)簽值</SPAN>
,這個(gè)值通過(guò)b.html中的js函數(shù)改變。包括height屬性
var hash_url = window.location.hash;
//得到b.html傳遞過(guò)來(lái)的height屬性
var hash_height = hash_url.split("#")[1]+"px";
//調(diào)整a_iframe的height,達(dá)到自適應(yīng)
a_iframe.height = hash_height;
</script>
最后,對(duì)方的頁(yè)面(b.html),讓對(duì)方在b.html中加入以下javascript代碼
<iframe id="b_iframe" width="100%" src="http://我的域名/../agent.html" style="display:none">
</iframe>
<script type="text/javascript">
var b_height = Math.max(document.body.scrollHeight,document.body.clientHeight);
var b_iframe = document.getElementById("b_iframe");
b_iframe.src = b_frame.src+"#"+b_height;
</script>
通過(guò) Math.max(clientHeight,scrollHeight)比較網(wǎng)頁(yè)可見(jiàn)區(qū)域高,網(wǎng)頁(yè)正文全文高這兩者得到其中的較大的值后,
iframe將這個(gè)height通過(guò)src傳遞到我的agent.html,這樣a.html中的Iframe就能自適應(yīng)對(duì)方的b.html高度了。這里在IE下測(cè)試的沒(méi)問(wèn)題,其它瀏覽器沒(méi)測(cè)試。
在實(shí)現(xiàn)這個(gè)功能的過(guò)程中,在網(wǎng)上發(fā)現(xiàn)了一段很有用的獲取頁(yè)面高度的js,在這里也記錄、引用下:
<script>
var strInfo=" " ;
strInfo+=" \r\n網(wǎng)頁(yè)可見(jiàn)區(qū)域?qū)?" +document.body.clientWidth;
strInfo+=" \r\n網(wǎng)頁(yè)可見(jiàn)區(qū)域高:" +document.body.clientHeight;
strInfo+=" \r\n網(wǎng)頁(yè)可見(jiàn)區(qū)域?qū)?" +document.body.offsetWidth+" (包括邊線的寬)" ;
strInfo+=" \r\n網(wǎng)頁(yè)可見(jiàn)區(qū)域高:" +document.body.offsetHeight+" (包括邊線的寬)" ;
strInfo+=" \r\n網(wǎng)頁(yè)正文全文寬:" +document.body.scrollWidth;
strInfo+=" \r\n網(wǎng)頁(yè)正文全文高:" +document.body.scrollHeight;
strInfo+=" \r\n網(wǎng)頁(yè)被卷去的高:" +document.body.scrollTop;
strInfo+=" \r\n網(wǎng)頁(yè)被卷去的左:" +document.body.scrollLeft;
strInfo+=" \r\n網(wǎng)頁(yè)正文部分上:" +window.screenTop;
strInfo+=" \r\n網(wǎng)頁(yè)正文部分左:" +window.screenLeft;
strInfo+=" \r\n屏幕分辨率的高:" +window.screen.height;
strInfo+=" \r\n屏幕分辨率的寬:" +window.screen.width;
strInfo+=" \r\n屏幕可用工作區(qū)高度:" +window.screen.availHeight;
strInfo+=" \r\n屏幕可用工作區(qū)寬度:" +window.screen.availWidth;
window.confirm(strInfo);
</script>
- php main 與 iframe 相互通訊類(js+php同域/跨域)
- javascript iframe跨域詳解
- JS未跨域操作iframe里的DOM
- JavaScript實(shí)現(xiàn)iframe自動(dòng)高度調(diào)整和不同主域名跨域
- AngularJS iframe跨域打開(kāi)內(nèi)容時(shí)報(bào)錯(cuò)誤的解決辦法
- js iframe跨域訪問(wèn)(同主域/非同主域)分別深入介紹
- js跨域問(wèn)題之跨域iframe自適應(yīng)大小實(shí)現(xiàn)代碼
- 跨域傳值即主頁(yè)面與iframe之間互相傳值
- 詳解iframe跨域的幾種常用方法(小結(jié))
- JS實(shí)現(xiàn)iframe中子父頁(yè)面跨域通訊的方法分析
相關(guān)文章
CutePsWheel javascript libary 控制輸入文本框?yàn)榭墒褂脻L輪控制的js庫(kù)
實(shí)現(xiàn)類似于Photoshop控制面板輸入文本數(shù)字的效果,所以名稱叫做PsWheel。用于控制輸入數(shù)字類型文本框?qū)崿F(xiàn)鼠標(biāo)滾輪上下滑動(dòng)改變值,支持正整數(shù)、小數(shù)類型輸入文本。2010-02-02
JS實(shí)現(xiàn)div內(nèi)部的文字或圖片自動(dòng)循環(huán)滾動(dòng)代碼
在某些情況下需要這樣的功能:使用JS實(shí)現(xiàn)div內(nèi)部的文字或圖片自動(dòng)循環(huán)滾動(dòng),接下來(lái)為大家詳細(xì)介紹下實(shí)現(xiàn)方法,感興趣的朋友可以參考下哈2013-04-04
基于javascript實(shí)現(xiàn)tab選項(xiàng)卡切換特效調(diào)試筆記
這篇文章主要介紹了基于javascript實(shí)現(xiàn)tab選項(xiàng)卡切換特效調(diào)試筆記,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-03-03
Javascript實(shí)現(xiàn)頁(yè)面滾動(dòng)時(shí)導(dǎo)航智能定位
本篇文章主要介紹了Javascript實(shí)現(xiàn)頁(yè)面滾動(dòng)時(shí)導(dǎo)航智能定位,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-05-05
Javascript客戶端將指定區(qū)域?qū)С龅絎ord、Excel的代碼
Javascript 瀏覽器客戶端導(dǎo)出指定區(qū)域到Word、Excel,非常不錯(cuò)的應(yīng)用實(shí)例2008-10-10
js限制input只能輸入有效的數(shù)字(第一個(gè)不能是小數(shù)點(diǎn))
有時(shí)候我們需要限制input只能輸入有效的數(shù)字,有且只有一個(gè)小數(shù)點(diǎn),第一個(gè)不能為小數(shù)點(diǎn),那么就可以參考下面的函數(shù)來(lái)實(shí)現(xiàn)2018-09-09
如何快速高效創(chuàng)建JavaScript 一維數(shù)組方法詳解
這篇文章主要為大家介紹了如何快速高效創(chuàng)建JavaScript 一維數(shù)組方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-02-02
javascript字符串替換函數(shù)如何一次性全部替換掉
這篇文章主要介紹了JS字符串替換函數(shù)replace如何一次性全部替換的相關(guān)資料,需要的朋友可以參考下2015-10-10

