Window: opener 属性

opener 属性是 Window 接口的一部分,它返回一个对打开当前窗口的窗口的引用,无论是通过 open(),还是通过带有 target 属性的链接进行导航。

换句话说,如果窗口 A 打开窗口 B,则 B.opener 返回 A

一个类似于 Window 的对象,它引用打开当前窗口的窗口(使用 window.open() 或通过设置了 target 属性的链接)。如果此窗口不是通过链接或由另一个窗口创建而打开的,则返回 null

如果 opener 与当前页面不在同一来源,则 opener 对象的功能将受到限制。例如,窗口对象上的变量和函数将无法访问。但是,可以导航 opener 窗口,这意味着打开的页面可以在原始选项卡或窗口中打开 URL。在某些情况下,这可能导致网络钓鱼攻击,其中新打开的页面会替换原始窗口中打开的可信页面为网络钓鱼页面。

准确地说,对于跨源 opener 对象,以下属性可用

此外,还有一些属性: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 表格仅在浏览器中加载