JavaScript应用:Iframe自适应其加载的内容高度

main.htm:

<html> 
    <head> 
       <meta  http-equiv='Content-Type'  content='text/html;  charset=gb2312' /> 
       <meta  name='author'  content='F.R.Huang(meizz梅花雪)//www.meizz.com' /> 
       <title>iframe自适应加载的页面高度</title> 
    </head> 
    
    <body>
        <div><iframe src="child.htm"></iframe></div>
    </body>
</html>

child.htm:

<html> 
<head> 
    <meta  http-equiv='Content-Type'  content='text/html;  charset=gb2312' /> 
    <meta  name='author'  content='F.R.Huang(meizz梅花雪)//www.meizz.com' /> 
    <title>iframe  自适应其加载的网页(多浏览器兼容)</title> 
    <script type="text/javascript">
    <!--
    function iframeAutoFit()
    {
        try
        {
            if(window!=parent)
            {
                var a = parent.document.getElementsByTagName("IFRAME");
                for(var i=0; i<a.length; i++) //author:meizz
                {
                    if(a[i].contentWindow==window)
                    {
                        var h1=0, h2=0;
                        a[i].parentNode.style.height = a[i].offsetHeight +"px";
                        a[i].style.height = "10px";
                        if(document.documentElement&&document.documentElement.scrollHeight)
                        {
                            h1=document.documentElement.scrollHeight;
                        }
                        if(document.body) h2=document.body.scrollHeight;

                        var h=Math.max(h1, h2);
                        if(document.all) {h += 4;}
                        if(window.opera) {h += 1;}
                        a[i].style.height = a[i].parentNode.style.height = h +"px";
                    }
                }
            }
        }
        catch (ex){}
    }
    if(window.attachEvent)
    {
        window.attachEvent("onload",  iframeAutoFit);
        //window.attachEvent("onresize",  iframeAutoFit);
    }
    else if(window.addEventListener)
    {
        window.addEventListener('load',  iframeAutoFit,  false);
        //window.addEventListener('resize',  iframeAutoFit,  false);
    }
    //-->
    </script> 
</head> 
<body>
    <table border="1" width="200" style="height: 400px; background-color: yellow">
        <tr>
            <td>iframe  自适应其加载的网页(多浏览器兼容,支持XHTML)</td>
        </tr>
    </table>
</body> 
</html>

 很多人反应在IE7里使用它会死机,那是因为在自适应高度时触发了 window.onresize 事件,而这个事件又去调用这个调整 <iframe> 高度的函数,产生了死循环调用。



Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=639857

 

 

#    dawave 发表于2006-04-17 08:57:00  IP: 216.58.17.*
下面的代码在IE和FireFox中测试通过:

<iframe name="frame1" src="..." οnlοad="this.height=window.frames[this.name].document.body.scrollHeight;">
#   风在雨里 发表于2006-05-24 14:27:00  IP: 220.231.23.*
检查之后,把这句后面的单位注释掉,问题好像不出现了。
具体原因不是很理解。
a[i].style.height = h;// +"px";

#   风在雨里 发表于2006-05-24 14:32:00  IP: 220.231.23.*
但是网页不能刷新。把这两句都注释掉。问题解决。。
// window.attachEvent("onresize", iframeAutoFit);
// window.addEventListener('resize', iframeAutoFit, false);

#   小胖 发表于2006-05-26 14:04:00  IP: 218.249.5.*
我试了,但是容易死机

#   cbzdream 发表于2006-06-05 14:12:00  IP: 202.127.112.*
document.body.scrollHeight的值有时候等于0,不知道为什么,

// window.attachEvent("onresize", iframeAutoFit);
// window.addEventListener('resize', iframeAutoFit, false);

必须去掉上面2句,要不然就ie就死了.
#    酷网吧! 发表于2006-07-16 21:58:00  IP: 60.190.130.*
下面这段一定行
iframe 自适应高度 js实现

代码如下:

注意!不能跨域使用,传到服务器,或者自己的iis里运行iframe 本域页面.~~

引用

<iframe src="http://www.pcieee.cn/" style="width: 100% ; border: 0px" frameborder=0 scrolling=yes name=right οnlοad="init()" border="0"></iframe>

<script>

var lastHeight;

function init() {

aaa();

lastHeight= right.document.body.scrollHeight;

setInterval(function(){

if(right.document.body.scrollHeight!=lastHeight) {

aaa();

lastHeight= right.document.body.scrollHeight;

}

},1);

}

function aaa(){

document.all('right').height=right.document.body.scrollHeight + 20;

}


</script>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值