Javascript:web页面中iframe自适应高度

我用的是第一种方法

方法一:
<script language="javascript">
   var getFFVersion=navigator.userAgent.substring(navigator.userAgent.indexOf("Firefox")).split("/")[1]
   //extra height in px to add to iframe in FireFox 1.0+ browsers
   var FFextraHeight=getFFVersion>=0.1? 16 : 0

   function dyniframesize(iframename) {
   var pTar = null;
   if (document.getElementById){
    pTar = document.getElementById(iframename);
   }
   else{
    eval('pTar = ' + iframename + ';');
   }
   if (pTar && !window.opera){
    //begin resizing iframe
    pTar.style.display="block"
      
    if (pTar.contentDocument && pTar.contentDocument.body.offsetHeight){
    //ns6 syntax
    pTar.height = pTar.contentDocument.body.offsetHeight+FFextraHeight;
    }
    else if (pTar.Document && pTar.Document.body.scrollHeight){
    //ie5+ syntax
    pTar.height = pTar.Document.body.scrollHeight;
    }
   }
   }
   </script>
  
HTML:
<iframe id="iweb" name="iweb" onload="javascript:{dyniframesize('iweb');}" marginwidth="0" marginheight="0" height="100%" width="100%" scrolling="no"
           frameborder="0" src="IndexContent.aspx"> </iframe>

方法二:来自http://blog.csdn.net/meizz/archive/2006/03/27/639857.aspx

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> 高度的函数,产生了死循环调用。

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/TScom/archive/2006/07/20/946836.aspx

 

posted @ 2010-03-02 23:05  wj-conquer  阅读(259)  评论(0编辑  收藏  举报