1

我已经为此苦苦挣扎了一整天,难以置信。我在我的网站上有一个选项,用户可以下载与某个用户的完整聊天记录,而不是在线加载它并且很可能会导致浏览器崩溃。无论如何,当他们请求下载他们的历史记录时,正在创建一个 zip 存档,其中包含每天的历史记录文件 - 以防他们没有足够强大的机器来一次打开它们以及包含所有历史记录文件的索引文件Iframe 的形式(而不是将相同的内容写在 2 个地方)。

问题:我想做的就是将 iframe 的高度设置为等于其内容的高度,令人惊讶的是,由于其同源策略,这在 chrome 中似乎是不公平的。我一开始以为我可以得到孩子 Iframe 的 body scrollHeight 并且没事,但后来 SOP 说不,然后打了我一巴掌。然后我想我可以从历史文件内部将 html 标签的 style.height 设置为其完整高度,然后检索它,但也失败了。

我真的开始失去希望了,有人能帮帮我吗?

4

2 回答 2

1

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

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

还要确保你调用 iframe WITHOUT 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>

我完全不确定这是否对你有用,但对我来说确实有效。

于 2013-05-23T20:59:46.357 回答
0

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

在 DisQus 使用 iFrame 与 postMessage 和无缝仿真

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

house9/jquery-iframe-自动高度

于 2013-05-23T20:53:10.497 回答