可以在从其他域加载内容后调整iFrame的大小吗?

时间:2012-02-28 17:07:15

标签: javascript iframe cross-domain

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

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

是否有一种可靠的方法可以使用其他域中的内容(我们可以访问这些域并可以使用FTP)来解决此问题,或者我是否需要告诉客户端他们必须在自己的域中镜像内容?

1 个答案:

答案 0 :(得分:0)

请参阅此帖和我的回答:Calling a parent window function from an iframe

这是可能的,但并不容易。你必须破解一下才能让它发挥作用。

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

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

更新

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

  1. 您是否已将document.domain <script>放在两个页面的头部?

  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);
                }
            }
        }
    };
    
  5. 让我知道它是怎么回事!