动态设置document.domain为iframe

时间:2013-03-11 05:59:53

标签: javascript iframe

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

更新#1

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

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

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

4 个答案:

答案 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.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