在测试SOP时,我遇到了这种情况:两个文档与我预期的相同域名有关,并且当我尝试获取位置时会抛出错误。
为了重现问题:
- 打开https://www.google.com
- 从控制台执行
let opened = window.open("https://www.google.com")
- 在同一个窗口中执行
opened.location.toString()
,将返回正确的位置 - 从第二个标签页的控制台执行
document.domain = "www.google.com"
再从第一个标签页执行
opened.location.toString()
,你将会得到一个错误
Uncaught DOMException: Blocked a frame with origin "https://www.google.com" from accessing a cross-origin frame.
at <anonymous>:1:12
有人能解释这种奇怪的行为吗?
typeof window.location.port
在任何情况下都不会改变 - Derek Pollardwindow.location.port
中的值复制同源检查。 - Nino Filiu