9

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

此代码目前适用于二级域:

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

但我需要以某种方式从父窗口获取它,而不是依赖于二级域

4

4 回答 4

8

我不知道它是否有帮助,但我在 iframe 中使用它

 try {
    var domainName = window.parent.parent.iframeData.domainName;
}
//Access violation
catch (err) {
    document.domain = window.location.hostname.replace('www.', '');
}

所以我检查域是否已经设置我们有异常尝试猜测域,在任何一种情况下,都不需要设置域

编辑:如果需要,更正确地使用发布消息来设置域

于 2013-03-12T09:34:33.320 回答
5

简而言之,它不能。document.domain仅当 iFrame 和包含窗口实际上是同一域的一部分时,设置才有效。如果浏览器让您设置document.domain为您实际所在域以外的其他内容,则将违反安全规定。考虑一下,任何恶意脚本都可能只是说“不,真的,相信我这个”,而浏览器基本上会说,“哦,好吧,既然你问得这么好,这就是你想要的所有权限”。

document.domain只能设置为页面实际域的父域。如果一个 iFrame 和一个包含窗口至少不共享,那么没有浏览器将允许它们串扰。

除非我误解了你的问题。随意张贴一些例子来澄清。

于 2013-03-11T06:13:11.713 回答
1

假设您的父母可以是a.domain.com 并且您的 iframe 是b.domain.com- 那么您可以做您正在尝试的事情。如果您必须知道父级是什么,请在 iframe src 属性中传递它或尝试document.referrer

于 2013-03-11T06:30:32.697 回答
-1

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

像这样。不要忘记 parent.top

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

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

正如我在这里提到的。javascript 获取 iframe url 在子域上的当前页面

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

于 2017-03-05T18:51:12.707 回答