我有一个可以注入页面的iframe,叫他"helper“。因此,由于同源策略,我需要将iframe域设置为与父窗口域相同。但我无法访问父窗口域。如何解决呢?
此代码目前适用于二级域名:
pathArray = window.location.host.split('.');
var arrLength = pathArray.length;
var domainName = pathArray.slice(arrLength - 2, arrLength).join('.');
document.domain = domainName;但我需要以某种方式从父窗口获得它,而不是依赖于二级域
发布于 2013-03-12 17:34:33
我不知道它是否会有帮助,但我在iframe中使用了这个。
try {
var domainName = window.parent.parent.iframeData.domainName;
}
//Access violation
catch (err) {
document.domain = window.location.hostname.replace('www.', '');
}因此,我检查是否已经设置了域,并尝试猜测域,无论是哪种情况,都不需要设置域
编辑:如果需要,更正确地使用post消息来设置域名
发布于 2013-03-11 14:13:12
简而言之,它不能。只有当iFrame和包含窗口实际上是同一个域的一部分时,设置document.domain才有效。如果浏览器允许您将document.domain设置为您实际所在的域之外的其他域,这将违反安全规定。考虑一下,任何恶意的脚本都可能会说‘不,真的,相信我’,而浏览器本质上会说,‘哦,好吧,既然你问得这么好,这就是你想要的所有权限’。
document.domain只能设置为页面实际域的父域。如果一个iFrame和一个包含窗口不共享至少这一点,那么任何浏览器都不会允许它们串话。
除非我误解了你的问题。请随时张贴一些例子来澄清。
发布于 2013-03-11 14:30:33
假设你的父母可以是a.domain.com,你的iframe是b.domain.com -那么你可以做你正在尝试的事情。如果必须知道父元素是什么,可以在iframe src属性中传递它,或者尝试使用document.referrer
https://stackoverflow.com/questions/15332115
复制相似问题