【问题标题】:Possible to resize iFrame after loading contents from a different domain?从不同域加载内容后可以调整 iFrame 的大小吗?
【发布时间】:2012-03-01 18:31:12
【问题描述】:

我希望在加载内容后在页面上调整 iFrame 的大小。不幸的是,在 iFrame 中加载的内容来自不同的域。我尝试使用以下代码在父窗口中调用函数,但它引发了安全错误:

<body onload="parent.document.someFunction(document.body.scrollHeight);">

是否有可靠的方法来使用来自其他域的内容(我们可以访问这些域并且可以 FTP)来实现这一点,还是我需要告诉客户他们必须将内容镜像到自己的域中?

【问题讨论】:

    标签: javascript iframe cross-domain


    【解决方案1】:

    请看这篇文章和我的回答:Calling a parent window function from an iframe

    这是可能的,但并不容易。你必须稍微破解一下才能让它工作。

    我相信,因为您可以访问框架域和框架页面域,所以您将能够使用 document.domain-in-the-head 技巧。

    <script>
        document.domain = "mydomain.com";
    </script>
    

    更新:

    我可以检查以下内容吗?:

    1. 您是否将 document.domain &lt;script&gt; 放在两个页面的开头?

    2. 两者是否具有完全相同的字符串,即两者都具有"subdomain.mydomain.com" 或都具有"mydomain.com"?通常,您使用它来确保框架页面与父页面具有相同的文档域。

    3. 从框架页面调用父函数后是否仍然出现安全错误?

    4. 如果不是,这是我用来调整框架大小的函数。它位于框架页面的头部。

      window.ResizeFrame = function (newHeight) {
          if (window.parent && window.parent.document) {
              var $frame = $(window.parent.document).find("#frame-id");
      
              if ($frame.length) {
                  if (typeof (newHeight) === "number") {
                      $frame.css("height", newHeight);
                  }
              }
          }
      };
      

    告诉我进展如何!

    【讨论】:

    • 很遗憾,这并没有解决问题。
    • 我发布了更新,其中包含有关我的场景如何工作的更多信息。
    • 嘿-所以这在我自己的域上的不同页面上有效,但在客户的域上无效。不知道为什么,但我将您的答案标记为正确,因为它在一个实例中确实有效。谢谢!!
    猜你喜欢
    • 1970-01-01
    • 2012-02-09
    • 2011-09-15
    • 1970-01-01
    • 2018-03-14
    • 1970-01-01
    • 1970-01-01
    • 2013-08-10
    • 2010-09-14
    相关资源
    最近更新 更多