从其他子域页面访问子域 iframe url

Posted

技术标签:

【中文标题】从其他子域页面访问子域 iframe url【英文标题】:Access subdomain iframe url from other subdomain page 【发布时间】: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 的值?

【问题讨论】:

【参考方案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

【讨论】:

以上是关于从其他子域页面访问子域 iframe url的主要内容,如果未能解决你的问题,请参考以下文章

在子域允许访问一个页面,如果试图访问其他页面重定向到主域名

如何在IE插件的子域中获取IFrame的页面源

尝试访问 iframe 内容(不同的子域);尝试设置 CORS

使用Azure功能启用CORS通配符子域

JSFinder:一个在js文件中提取URL和子域名的脚本

内部链接仍然指向开发子域?