Window: opener 属性

Baseline 已广泛支持

此特性已相当成熟,可在许多设备和浏览器版本上使用。自 ⁨2015 年 7 月⁩以来,各浏览器均已提供此特性。

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

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

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

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

确切地说,对于跨域的打开者对象,以下属性可用:

此外,还有一些属性:then[Symbol.toStringTag][Symbol.hasInstance][Symbol.isConcatSpreadable],这些属性被各种 JavaScript 操作使用。这些属性的值为 undefined。所有其他属性在访问时都会生成 SecurityError DOMException

在以下情况下,浏览器不会填充 window.opener,而是将其保留为 null

  • 可以通过在链接上指定 rel=noopener,或在 windowFeatures 参数中传递 noopener 来省略打开者。
  • 因为带有 _blank target 的链接而打开的窗口不会获得 opener,除非明确地使用 rel=opener 请求。
  • 带有 same-origin 值的 Cross-Origin-Opener-Policy 头部会阻止设置 opener。由于新窗口在不同的浏览上下文中加载,它不会引用打开它的窗口。

规范

规范
HTML
# dom-opener-dev

浏览器兼容性