首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将document.domain动态设置为iframe

将document.domain动态设置为iframe
EN

Stack Overflow用户
提问于 2013-03-11 13:59:53
回答 4查看 36.3K关注 0票数 9

我有一个可以注入页面的iframe,叫他"helper“。因此,由于同源策略,我需要将iframe域设置为与父窗口域相同。但我无法访问父窗口域。如何解决呢?

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

代码语言:javascript
复制
pathArray = window.location.host.split('.');
var arrLength = pathArray.length;
var domainName = pathArray.slice(arrLength - 2, arrLength).join('.');
document.domain = domainName;

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

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-03-12 17:34:33

我不知道它是否会有帮助,但我在iframe中使用了这个。

代码语言:javascript
复制
 try {
    var domainName = window.parent.parent.iframeData.domainName;
}
//Access violation
catch (err) {
    document.domain = window.location.hostname.replace('www.', '');
}

因此,我检查是否已经设置了域,并尝试猜测域,无论是哪种情况,都不需要设置域

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

票数 8
EN

Stack Overflow用户

发布于 2013-03-11 14:13:12

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

document.domain只能设置为页面实际域的父域。如果一个iFrame和一个包含窗口不共享至少这一点,那么任何浏览器都不会允许它们串话。

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

票数 5
EN

Stack Overflow用户

发布于 2013-03-11 14:30:33

假设你的父母可以是a.domain.com,你的iframe是b.domain.com -那么你可以做你正在尝试的事情。如果必须知道父元素是什么,可以在iframe src属性中传递它,或者尝试使用document.referrer

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15332115

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档