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

瀏覽器相容性