设置Iframe的高度等于其内容

时间:2013-05-23 20:48:49

标签: javascript jquery google-chrome iframe same-origin-policy

我一直在努力奋斗这一整天,令人难以置信。我在我的网站上有一个选项,用户可以在某个用户下载完整的聊天记录,而不是在线加载,最有可能导致浏览器崩溃。无论如何,当他们要求下载他们的历史记录时,正在创建一个zip存档,其中包含每天都有历史记录的文件 - 如果他们没有足够强大的机器来同时打开它们,并且索引文件包含所有历史文件iframe的形式(而不是在2个地方写相同的内容)。

问题:我想要做的就是将Iframe的高度设置为等于其内容的高度,令人惊讶的是,由于其同源政策,这在Chrome中看起来不太公平。我首先想到的是我可以让孩子的iframe的身体滚动,并且没事,但是SOP说不,并且打了我的脸。然后我想我可以从历史文件内部将html标签的style.height设置为其完整高度,然后检索它,但也失败了。

我真的开始失去希望,任何人都可以帮助我吗?

2 个答案:

答案 0 :(得分:1)

在iframe内容的页面和您调用iframe的页面中,输入:

<script>
    document.domain = 'http://yoursite.com'; (NOT www.)
</script>

另外,请务必调出iframe,不要www.

执行:<iframe onload = "setIframeHeight( this.id )" ...>

iFrameHeight()如下:

<script>
   document.domain = 'http://yoursite.com';
    function setIframeHeight( iframeId )
    {
     var ifDoc, ifRef = document.getElementById( iframeId );
     try
     {   
      ifDoc = ifRef.contentWindow.document.documentElement;  
     }
     catch( e )
     { 
      try
      { 
       ifDoc = ifRef.contentDocument.documentElement;  
      }
      catch(ee)
      {   
      }  
     }
     if( ifDoc )
     {
      ifRef.height = 1;  
      ifRef.height = ifDoc.scrollHeight;  
     }
 </script>

我根本不确定这对你有用,但对我而言确实如此。

答案 1 :(得分:0)

Marakana TechTV上的这个视频包含了无缝iframe集成的好技巧:

iFrame usage with postMessage and seamless emulation at DisQus

此外,还有一个jQuery插件(未经测试)声称提供了功能。

house9/jquery-iframe-auto-height