【问题标题】:Access subdomain iframe url from other subdomain page从其他子域页面访问子域 iframe url
【发布时间】:2014-05-20 03:33:41
【问题描述】:

我正在尝试访问托管在同一域中的子域上的 iframe 的 iframe contentWindow 属性。所以我在 a.domain.com 上有这段代码(它承载了父页面的角色):

<script type="text/javascript">
    $(document).ready(function () {        
        $('#frame').load(function () {            
            var iframe = document.getElementById('frame');            
            if (iframe) {
                 var item = iframe.contentWindow;             
                if (item.indexOf("Completed") != -1) {
                    window.location.href = '../Home/Completed/';                   
                } else {
                    window.location.href = '../Home/PayAgain/';
                }
            }            
        });
    });
</script>

实际的 iframe 内容位于 b.domain.com 上,我想在 iframe 中获取当前页面。

我看到一些示例,我需要在 a.domain.com 和 b.domain.com 中设置 document.domain = "domain.com" 但例如我需要在 a.domain.com 中设置什么和 b.domain.com 关于 document.domain?

我需要在 b.domain.com 的哪些页面设置 document.domain 的值?

【问题讨论】:

    标签: javascript jquery html iframe same-origin-policy


    【解决方案1】:

    我也遇到了同样的情况,我发现使用 window.postMessage 是一种更好的框架间通信方式:https://developer.mozilla.org/en-US/docs/Web/API/Window.postMessage

    如果你想使用你提到的方法,在框架内加载的每个页面都需要在加载时手动设置 document.domain。父页面也需要设置它。它只是文档对象的一个​​内置 javascript 属性。

    【讨论】:

    • 我也查看了 postMessage 功能,但我无法对 iframe 中托管在 b.domain.com 上的文件进行任何更改。你能告诉我你是如何将 postMessage 功能放在 a.domain.com 和 b.domain.com 中的,当然还有一些虚拟数据。谢谢
    • 如果您不能同时更改 a.domain.com 和 b.domain.com 中的代码,那么您将无法在两者之间进行通信。您可以将 document.domain 设置为 UP,但不能将其设置为 DOWN。因此,您可以从“a.domain.com”更改为“domain.com”,但不能将“a.domain.com”更改为“b.domain.com”。您需要访问代码来设置 document.domain 属性并执行 window.postMessage 方法。
    • 能否请您提供代码示例,如果我可以访问代码,我该怎么做,谢谢
    • 抱歉,代码视图不起作用。希望你能明白这一点: function sendToFrame() { var mf = document.getElementById('myFrame').contentWindow; // 您发送的消息由您决定,只要是字符串即可。我使用 JSON,对其进行字符串化,然后在另一边解析它 var jsObj = { Content: "Some Data" }; // 发送消息到目标 mf.postMessage(JSON.stringify(jsObj), "b.domain.com"); }
    【解决方案2】:

    在两个页面中添加 document.domain = 'your.domain'。

    像这样。不要忘记parent.top

    document.domain = 'corp.local'; 只有父母喜欢

    document.domain = 'corp'; 不会工作。

    正如我在这里提到的。 javascript get iframe url's current page on subdomain

    这份文件有帮助。 http://javascript.info/tutorial/same-origin-security-policy

    【讨论】:

      猜你喜欢
      • 2016-11-22
      • 2016-11-23
      • 1970-01-01
      • 2010-10-16
      • 1970-01-01
      • 1970-01-01
      • 2015-10-18
      • 1970-01-01
      • 2011-07-08
      相关资源
      最近更新 更多