我有一个注入页面的iframe,称他为“帮手”。因此,由于相同的原始策略,我需要设置iframe域同样是父窗口域。但我无法访问父窗口域。怎么解决?
更新#1
此代码目前适用于二级域名:
pathArray = window.location.host.split('.');
var arrLength = pathArray.length;
var domainName = pathArray.slice(arrLength - 2, arrLength).join('.');
document.domain = domainName;
但我需要以某种方式从父窗口获取它而不是依赖于二级域
答案 0 :(得分:7)
我不知道它是否有用,但我在iframe中使用它
try {
var domainName = window.parent.parent.iframeData.domainName;
}
//Access violation
catch (err) {
document.domain = window.location.hostname.replace('www.', '');
}
所以我检查域是否已经设置我们有异常ang尝试猜测域,在任何一种情况下,都不需要设置域
编辑: 更正确地使用帖子消息来设置域名(如果需要)
答案 1 :(得分:2)
总之,它不能。仅当iFrame和包含窗口实际上是同一域的一部分时,设置document.domain
才有效。如果浏览器允许您将document.domain
设置为您实际所在域以外的其他内容,则会违反安全规则。考虑一下,任何恶意脚本都可以说'不,真的,相信我这个',浏览器基本上会说,'哦,好吧,既然你问得这么好,这就是你想要的所有权限'。
document.domain
只能设置为页面实际域的父域。如果iFrame和包含窗口至少没有共享,那么没有浏览器允许它们进行交谈。
除非我误解了你的问题。随意发布一些例子来澄清。
答案 2 :(得分:1)
假设您的父母可以a.domain.com
而你的iframe是b.domain.com
- 然后你可以做你正在尝试的事情。
如果您必须知道父级是什么,请将其传递给iframe src属性或尝试document.referrer
答案 3 :(得分:0)
在两个页面中添加document.domain ='your.domain'。
像这样。不要忘记parent.topdocument.domain ='corp.local';只有父母喜欢
document.domain ='corp';不行。
正如我在这里提到的那样。 javascript get iframe url's current page on subdomain
这份文件有所帮助。 http://javascript.info/tutorial/same-origin-security-policy