Javascript 将document.domain动态设置为iframe

Javascript 将document.domain动态设置为iframe,javascript,iframe,Javascript,Iframe,我有一个iframe,在页面中注入,称他为“助手”。因此,由于同源策略,我需要将iframe域设置为相同的父窗口域。但我无法访问父窗口域。怎么解决呢? 此代码当前适用于第二级域: pathArray = window.location.host.split('.'); var arrLength = pathArray.length; var domainName = pathArray.slice(arrLength - 2, arrLength).join('.'); document.do

我有一个iframe,在页面中注入,称他为“助手”。因此,由于同源策略,我需要将iframe域设置为相同的父窗口域。但我无法访问父窗口域。怎么解决呢?

此代码当前适用于第二级域:

pathArray = window.location.host.split('.');
var arrLength = pathArray.length;
var domainName = pathArray.slice(arrLength - 2, arrLength).join('.');
document.domain = domainName;

但我需要以某种方式从父窗口获取它,而不是依赖于二级域。简言之,它不能。设置
document.domain
仅当iFrame和包含窗口实际上是同一域的一部分时有效。如果浏览器允许您将
document.domain
设置为实际所在域以外的其他域,则会违反安全性。考虑一下,任何恶意脚本都可以说“不,真的,相信我”,浏览器基本上会说,“哦,好吧,既然你问得这么好,这里就是你想要的所有权限”。
document.domain
只能设置为页面实际域的父域。如果iFrame和包含它们的窗口至少不共享这一点,那么任何浏览器都不允许它们进行串扰


除非我误解了你的问题。请随意发布一些示例来澄清。

假设您的家长可以是
a.domain.com
而你的iframe是
b.domain.com
——那么你就可以做你想做的事情了。
如果您必须知道父项是什么,请在iframe src属性中传递它,或者尝试
文档。referer
我不知道它是否有用,但我在iframe中使用它

 try {
    var domainName = window.parent.parent.iframeData.domainName;
}
//Access violation
catch (err) {
    document.domain = window.location.hostname.replace('www.', '');
}
所以我检查是否已经设置了域,我们有异常并尝试猜测域,在任何一种情况下,都不需要设置域

编辑:
如果需要,可以更正确地使用post消息设置域

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

像这样。别忘了双亲

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

document.domain='corp';不行

正如我在这里提到的


这份文件很有帮助

您的iframe来自另一台服务器?那么,将document.domain设置为什么并不重要。它必须来自该域如果域的最后部分不一样,那么就忘了它。它用于将sales.domain.com与shopping.domain.com相匹配,而不是将site.sales.com与site.shopping.com相匹配。是的,从父窗口获取它将是相同的,我只知道热点。此外,您可能会对如下剥离端口号感兴趣:document.domain=domainName.split(“:”[0];例如,我有6.weather.ch父域,如果我使用我的代码,我有iframe域weather.ch,权限被拒绝。然后父代码必须将他的document.domain设置为“weather.ch”或“.weather.ch”(我不记得是否有前导点)