iframe 高度自适应性

iframe 自动高

通常做后台的时候,都喜欢用框架,在用frameset的时候,把系统分为左右两块,或者上左右两块不会出现自动高的情况,如果使用了iframe,就要碰上iframe自动高的问题,这不,我现在就折腾上了,可把哥给累着了!

网上搜索”iframe自动高”会有很多的解决方案,我试了很多,但都存在问题,大多只解决了iframe加载完后的静态内容实现的自动高,iframe加载完后,对DOM操作,或者表格挤压引起的高度变化却不起作用.为此郁闷了N久!

如果iframe里面内容不进行DOM操作,可以使用这种最简单的方式

<iframe id="iframe" src="iframe.html" scrolling="no" frameborder="0" onload="this.height=this.contentWindow.document.documentElement.scrollHeight"></iframe>

反之,在iframe页里进行DOM操作,或者表格展现(表格展现如果挤压会改变高度)可以使用下面的方法

<iframe id="iframe" src="iframe_b.html" scrolling="no" frameborder="0"></iframe>
<script type="text/javascript">
    function reinitIframe() {
var iframe = document.getElementById("iframe");
try {
var bHeight = iframe.contentWindow.document.body.scrollHeight;
var dHeight = iframe.contentWindow.document.documentElement.scrollHeight;
var height = Math.max(bHeight, dHeight);
iframe.height = height;
} catch (ex) { }
}
window.setInterval("reinitIframe()", 200);//定时去检查iframe的高度,这样保证时时都是自动高了
</script>

时时去检测iframe的高度,在主页中引用以上代码就可以了.效率不会有什么影响.

注:方法来自于http://ued.koubei.com/?p=243 ,可以去看看详细的解释和解决方案思路!

如果有多个iframe需要自动高,可以下载并引入autoHeight.js,然后在页面中的iframe中加入指定的属性class=”autoHeight”,就可以了,但是同样只支持加载完的静态内容.

<iframe src="demo_child.htm" width="900" frameborder="0" scrolling="auto" class="autoHeight"></iframe>

浏览器兼容真是一个蛮头疼的问题,关于取页面的高度的一些东西,确实是有些麻烦,不是非不得已,建议还是不要用iframe,否则会带来许多兼容问题,浪费工作效率了..除了浏览器,DTD对页面的高度影响也不一样,最好加上正确的DTD.呵呵

你可能感兴趣的:(iframe)