【问题标题】:what is the scope of document.domain()?document.domain() 的范围是什么?
【发布时间】:2017-04-22 01:38:59
【问题描述】:

我知道如果我们有 payment.example.com 和 news.example.com 并且他们都将 document.domain 设置为 exmaple.com 他们可以通信。但是,如果 en.news.example.com 选择加入并设置 document.domain=example.com 会怎样?也可以交流吗?

【问题讨论】:

  • 什么是:en.news.example.com 选择加入?
  • 表示将 en.news.example.com 添加到页面 document.domain=example.com

标签: javascript dom iframe same-origin-policy


【解决方案1】:

Document.domain

获取/设置当前文档来源的域部分,由同源策略使用。

same-origin policy 限制从一个来源加载的文档或脚本如何与来自另一个来源的资源进行交互。它是隔离潜在恶意文档的关键安全机制。

例子:

// for document www.example.xxx/good.html,
// this script closes the window
var badDomain = "www.example.xxx";

if (document.domain == badDomain)
   window.close(); // Just an example - window.close() sometimes has no effect.

var domain = document.domain;

当您的网页位于同一网站的不同子域时,更改此属性的值是解决同源策略适用的限制的最简单方法。虽然 JavaScript 通常会认为来自 blog.example.com 和 forum.example.com 的页面来自不同的来源,因此不允许来自一个页面的 JavaScript 与来自另一个页面的网页进行交互,但您可以通过设置文档来解决此特定限制.domain 在两个页面中设置为相同的值。通过将 document.domain 设置为所有脚本中域名的最短版本,您将允许 JavaScript 在您网站的所有页面之间进行通信,而不管协议、子域或端口如何。

【讨论】:

  • 谢谢,但它没有回答我的问题。如果添加 document.domain=example.com,子子域可以进行通信吗?例如 more.blog.example.com
  • @JauL 答案是肯定的。尝试在检查器中运行 here 并运行 document.domain = 'whatwg.org';
猜你喜欢
  • 2010-12-01
  • 2011-11-11
  • 2020-10-18
  • 1970-01-01
  • 2023-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多