iframe跨域高度自适应的代码示例

发布时间:2019-09-29编辑:脚本学堂
本文介绍下,iframe跨域环境中自适应高度的实现方法,有需要的朋友参考下吧。

iframe高度的自适应问题,解决办法:
 

复制代码 代码示例:
<script>
/**
 * 跨域iframe高度自适应
 * edit www.jb200.com
*/
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;
}
</script>
 

将上面代码直接保存一个文件iframe.js,然后引用它。

注意:这段代码对于跨域的iframe引用不太适用,需要特别定义其iframe高度。

下面介绍一个可以跨域iframe自适应高度的代码。

首先,在页面a.html需要引入对方的b.html,在这里运用iframe方式实现页面的套用。
a.html页面
 

复制代码 代码示例:
<BODY>
<iframe width="100%" id="a_iframe" name="a_iframe" src="http://对方域名/b.html"
frameborder="no" border="0px" scrolling="no" allowtransparency="yes" ></iframe>
</BODY>

a.html页面只是用来引入对方页面的一个简单页面。
然后,最好在a.html同一级目录下,创建一个agent.html页面,该页面用来得到对方通过js传递过来的参数,
根据高度参数来调整a.html中的a_iframe的高度:
1,Js代码
 

复制代码 代码示例:
<script type="text/javascript">
//得到a.html中的a_iframe
var a_iframe = parent.parent.document.getElementById("a_iframe");
//<SPAN>location.hash用来获取页面的标签值</SPAN>
,这个值通过b.html中的js函数改变。包括height属性
var hash_url = window.location.hash;
//得到b.html传递过来的height属性
var hash_height = hash_url.split("#")[1]+"px";
//调整a_iframe的height,达到自适应
a_iframe.height = hash_height;
</script>

最后,对方的页面(b.html),让对方在b.html中加入以下js代码:
 

复制代码 代码示例:
<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>

通过 Math.max(clientHeight,scrollHeight)比较网页可见区域高、网页正文全文高这两者得到其中的较大的值后,iframe将这个height通过src传递到我的agent.html,这样a.html中的Iframe就能自适应对方的b.html高度了。这里在IE下测试的没问题,其它浏览器没测试。

以下是,在实现此功能的过程中,找到的一段很有用的获取页面高度的js,分享下:
 

复制代码 代码示例:
<script>
var strInfo=" " ;
strInfo+=" rn网页可见区域宽:" +document.body.clientWidth;
strInfo+=" rn网页可见区域高:" +document.body.clientHeight;
strInfo+=" rn网页可见区域宽:" +document.body.offsetWidth+" (包括边线的宽)" ;
strInfo+=" rn网页可见区域高:" +document.body.offsetHeight+" (包括边线的宽)" ;
strInfo+=" rn网页正文全文宽:" +document.body.scrollWidth;
strInfo+=" rn网页正文全文高:" +document.body.scrollHeight;
strInfo+=" rn网页被卷去的高:" +document.body.scrollTop;
strInfo+=" rn网页被卷去的左:" +document.body.scrollLeft;
strInfo+=" rn网页正文部分上:" +window.screenTop;
strInfo+=" rn网页正文部分左:" +window.screenLeft;
strInfo+=" rn屏幕分辨率的高:" +window.screen.height;
strInfo+=" rn屏幕分辨率的宽:" +window.screen.width;
strInfo+=" rn屏幕可用工作区高度:" +window.screen.availHeight;
strInfo+=" rn屏幕可用工作区宽度:" +window.screen.availWidth;
window.confirm(strInfo);
</script>

关于跨域实现iframe高度自适应的方法,就介绍到这里了,希望对大家有所帮助。