【问题标题】:Dynamically set document.domain to iframe将 document.domain 动态设置为 iframe
【发布时间】:2020-11-09 11:59:17
【问题描述】:

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

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

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

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

【问题讨论】:

  • 您的 iframe 来自另一台服务器?那么您将 document.domain 设置为什么并不重要。它必须来自该域
  • 如果域的最后部分不一样,那就算了吧。它用于将 sales.domain.com 与 shopping.domain.com 匹配,而不是将 site.sales.com 与 site.shopping.com 匹配
  • 是的,它会是一样的,我只是知道从父窗口获取它很热。
  • 另外,您可能有兴趣像这样剥离端口号:document.domain = domainName.split(":")[0];

标签: javascript iframe


【解决方案1】:

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

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

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

编辑: 如果需要,更正确地使用帖子消息设置域

【讨论】:

    【解决方案2】:

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

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

    除非我误解了你的问题。随时发布一些示例以进行澄清。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 例如我有 6.weather.ch 父域,如果我使用我的代码,我有 iframe 域weather.ch,权限被拒绝
      • 然后父代码必须将 HIS document.domain 设置为“weather.ch”或“.weather.ch”(我不记得它是否带有前导点)
      【解决方案4】:

      在两个页面中添加 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

      【讨论】:

        猜你喜欢
        • 2011-01-30
        • 1970-01-01
        • 2011-10-13
        • 2017-10-24
        • 1970-01-01
        • 2016-07-19
        • 2015-12-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多