文档:域属性
已弃用:此功能不再推荐。尽管某些浏览器可能仍然支持它,但它可能已从相关 Web 标准中删除,可能正在被删除,或者可能只是为了兼容性而保留。避免使用它,如果可能,请更新现有代码;查看此页面底部的兼容性表,以指导您的决策。请注意,此功能可能随时停止工作。
值
一个字符串。
异常
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
,那么任何其他位于不同子域名的客户现在都可以执行相同操作,并开始访问原始站点的數據。
你应该使用Window.postMessage
向另一个来源发送异步消息,而不是使用 document.domain
来促进跨域通信。通过消息传递进行的这种受控访问比 document.domain
造成的对所有数据的全面暴露安全得多。
失败
在几种情况下,setter 将抛出 "SecurityError
" DOMException
document-domain
Permissions-Policy
被禁用。- 文档位于沙盒化的
<iframe>
中。 - 文档没有浏览上下文。
- 文档的有效域 为
null
。 - 给定的值既不是与页面的当前主机名相同,也不是其父域名。
作为此最后一个失败案例的示例,尝试将 document.domain
设置为 "example.org"
时,当在 https://example.com/
上时将抛出错误。
此外,作为其弃用的一部分,它在与某些现代隔离功能结合使用时将不会执行任何操作。
- 如果在跨域隔离页面上使用,即使用
Cross-Origin-Opener-Policy
和Cross-Origin-Embedder-Policy
HTTP 头部的适当值的页面。 - 如果在来源隔离页面上使用,即使用
Origin-Isolation
HTTP 头部的页面。
最后,设置 document.domain
不会更改某些 Web API 用于来源检查的来源,从而阻止通过此机制进行子域访问。受影响的 API 包括(但不限于):Window.localStorage
、IndexDB API、BroadcastChannel
、SharedWorker
。
规范
规范 |
---|
HTML 标准 # 放松同源限制 |
浏览器兼容性
BCD 表格仅在浏览器中加载