这个iframe的问题,在工作中简直就是突然的一到坎,打的戳不及防。通常很久遇到一次,每次遇到就忘记了上一次是如何解决的,emmmm…今天本仙女去总结一下。
在实际应用中,很多时候通iframe引入页面,如果同域情况,可以使用以下代码。
script:
window.function(){
var ifm= document.getElementById(“iframepage”);
var subWeb = document.frames ? document.frames[“iframepage”].document:ifm.contentDocument;
if(ifm != null && subWeb != null){
ifm.height = subWeb.body.scrollHeight;
}
}
body:
<iframe src=“iframe.html” id=“iframepage” name=“iframepage” width=“100%”>
但是引进来的页面,往往是跨域的,上述代码就会报错,因为跨域的安全性问题。
所以,我们就要找个“中介”来帮助我们。
比如在域A中有一个页面a.html,我们要引入域C中的页面c.html,这样我们可以在域A中再建立一个“中介”页面b.html,作为c.html的子页面,然后获取一些相关信息,最后通过b.html来实现设置a.html中iframe高度的效果,因为b和a是在同域下的,所以不存在安全障碍。
c.html中的代码如下:(不知道为啥标签一写就出不来代码,请手动补全标签哦)
<iframe id=“b_id” width=“100%” src=“http://域A/b.html” style=“display:none”>
<script type=“text/javascript”>
var c_height=Math.max(document.body.scrollHeight,document.body.clientHeight);
var b_iframe = document.getElementById(“b_id”);
b_iframe.src = b_frame.src+"#"+b_height;
通过url,为"中介"页面b.html传递了c.html的高度信息,这个高度就是a.html中iframe的自适应高度。
b.html中的代码如下:
JavaScript:
//得到a.html中的a_iframe
var a_iframe=parent.parent.document.getElementById(“a_iframe”);
var hash_url = window.location.hash;
//得到传递过来的height属性
var hash_height = hash_url.split("#")[1]+“px”;
//调整a_iframe的height,达到自适应
a_iframe.height = hash_height;
这样就可以实现跨域iframe高度自适应效果了。