Window: opener 属性
opener
属性是 Window
接口的一部分,它返回一个对打开当前窗口的窗口的引用,无论是通过 open()
,还是通过带有 target
属性的链接进行导航。
换句话说,如果窗口 A
打开窗口 B
,则 B.opener
返回 A
。
值
一个类似于 Window
的对象,它引用打开当前窗口的窗口(使用 window.open()
或通过设置了 target
属性的链接)。如果此窗口不是通过链接或由另一个窗口创建而打开的,则返回 null
。
如果 opener 与当前页面不在同一来源,则 opener 对象的功能将受到限制。例如,窗口对象上的变量和函数将无法访问。但是,可以导航 opener 窗口,这意味着打开的页面可以在原始选项卡或窗口中打开 URL。在某些情况下,这可能导致网络钓鱼攻击,其中新打开的页面会替换原始窗口中打开的可信页面为网络钓鱼页面。
准确地说,对于跨源 opener 对象,以下属性可用
window
self
location
:仅提供Location.replace
和Location.href
属性close
closed
focus
blur
frames
length
top
opener
parent
postMessage
window[0]
、window[1]
等。
此外,还有一些属性:then
、[Symbol.toStringTag]
、[Symbol.hasInstance]
、[Symbol.isConcatSpreadable]
,这些属性由各种 JavaScript 操作使用。这些属性的值为 undefined
。访问所有其他属性时都会生成 SecurityError
DOMException
。
在以下情况下,浏览器不会填充 window.opener
,而是将其保留为 null
- 可以通过在链接上指定
rel=noopener
或在windowFeatures
参数中传递noopener
来省略 opener。 - 由于带有
_blank
的链接而打开的窗口不会获得opener
,除非使用rel=opener
明确请求。 - 如果
Cross-Origin-Opener-Policy
标头值为same-origin
,则会阻止设置opener
。由于新窗口在不同的浏览上下文中加载,因此它不会引用打开的窗口。
规范
规范 |
---|
HTML 标准 # dom-opener-dev |
浏览器兼容性
BCD 表格仅在浏览器中加载