文档:domain 属性
已弃用:此特性不再推荐。虽然某些浏览器可能仍然支持它,但它可能已经从相关的网络标准中删除,可能正在删除过程中,或者可能仅为兼容性目的而保留。请避免使用它,如果可能,请更新现有代码;请参阅本页底部的兼容性表格以指导您的决策。请注意,此特性可能随时停止工作。
Document
接口的 domain
属性获取/设置当前文档来源(origin)的域部分,该域用于同源策略。
值
字符串。
异常
SecurityError
DOMException
-
文档禁止设置其域,例如,它处于沙盒中或具有不透明的来源。详情请参阅“失败”部分。
示例
获取域
对于在 URL https://mdn.org.cn/en-US/docs/Web
运行的代码,此示例会将 currentDomain
设置为字符串 "developer.mozilla.org"
。
const currentDomain = document.domain;
此属性的 getter 返回当前文档来源的域部分。在大多数情况下,这将是文档 URL 的主机名部分。但是,也有一些例外情况:
尽管 getter 不像 setter 那样危险,但使用 Location.hostname
属性可能更简单和更有用。这样你就可以完全避免使用 document.domain
。
const currentHostname = location.hostname;
对于 URL https://mdn.org.cn/en-US/docs/Web
,currentHostname
也是字符串 "developer.mozilla.org"
。其他提供略微不同信息的替代方案是 Location.host
(包含端口)和 Window.origin
(提供完整来源)。
设置域
document.domain = domainString;
此属性的 setter 可用于更改页面的来源,从而修改某些安全检查的执行方式。它只能设置为相同或父域。例如,如果 https://a.example.com
和 https://b.example.com
都使用
document.domain = "example.com";
那么它们都修改了它们的来源以具有相同的域,并且它们现在可以直接访问彼此的 DOM——尽管是跨域的,这通常会阻止此类访问。
请注意,将 document.domain
设置为其当前值并非空操作。它仍然会更改来源。例如,如果一个页面设置了
document.domain = document.domain;
那么它将被视为与任何其他未进行相同操作的正常同源页面跨源。
废弃
document.domain
setter 已废弃。它破坏了同源策略提供的安全保护,并使浏览器中的来源模型复杂化,导致互操作性问题和安全漏洞。
尝试设置 document.domain
是危险的。它开放了从所有子域对页面 DOM 的完全访问权限,这可能不是预期行为。它还会从来源中移除端口组件,因此现在您的页面可以被具有相同 IP 地址或相同主机组件的其他页面访问,即使在不同的端口上。
这在共享主机上尤其不安全。例如,另一个共享主机客户可以在相同的 IP 地址但在不同的端口上托管一个站点,然后设置 document.domain
将移除通常保护您免受该其他客户站点访问您的站点数据的同源保护。
共享主机站点给每个客户一个不同的子域时也会出现类似问题。如果一个站点设置了 document.domain
,任何其他子域上的客户现在都可以做同样的事情,并开始访问原始站点的数据。
您不应使用 document.domain
来促进跨域通信,而应使用 Window.postMessage
向其他来源发送异步消息。这种通过消息传递进行的受控访问比 document.domain
导致的所有数据全面暴露要安全得多。
失败
在以下几种情况下,setter 将抛出 SecurityError
DOMException
:
作为最后一个失败案例的示例,在 https://example.com/
上尝试将 document.domain
设置为 "example.org"
将抛出错误。
此外,作为其弃用的一部分,当与某些现代隔离功能结合使用时,它将不执行任何操作:
- 如果在跨域隔离页面上使用,即使用
Cross-Origin-Opener-Policy
和Cross-Origin-Embedder-Policy
HTTP 标头相应值的页面。 - 如果在来源隔离页面上使用,即使用
Origin-Agent-Cluster
实验性 HTTP 标头的页面。
最后,设置 document.domain
不会更改某些 Web API 用于来源检查的来源,从而阻止通过此机制进行子域访问。受影响的 API 包括(但不限于):Window.localStorage
、IndexDB API、BroadcastChannel
、SharedWorker
。
规范
规范 |
---|
HTML # 放宽同源限制 |
浏览器兼容性
加载中…