runtime.getBackgroundPage()

檢索當前擴充套件程式中正在執行的後臺頁面的 Window 物件。如果後臺頁面是非永續性的(事件頁面)並且未執行,則會啟動後臺頁面。

這為其他特權擴充套件指令碼提供了一種便捷的方式來直接訪問後臺指令碼的範圍。這使它們能夠訪問該範圍中定義的變數或呼叫函式。“特權指令碼”在此處包括在 選項頁面 中執行的指令碼,或在 瀏覽器操作頁面操作 彈出視窗中執行的指令碼,但 *不* 包括 內容指令碼

請注意,使用 constlet 宣告的變數不會出現在此函式返回的 Window 物件中。

另請注意,此方法在 Firefox 的隱私模式視窗中不可用 — 它始終返回 null。有關更多資訊,請參閱 Bugzilla 上的相關 bug

如果後臺頁面是事件頁面,系統將確保在解析 Promise 之前載入它。

這是一個非同步函式,返回一個 Promise

注意: 在 Firefox 中,此方法不能在隱私瀏覽模式下使用 — 它始終返回 null。有關更多資訊,請參閱 Firefox bug 1329304

在 Chrome 中,此方法僅適用於永續性後臺頁面,而 Manifest V3 中不提供永續性後臺頁面,因此請考慮使用 Manifest V2。有關詳細資訊,請參閱 遷移到服務工作執行緒

考慮使用 runtime.sendMessage()runtime.connect(),它們在上述兩種情況下都能正常工作。

語法

js
let gettingPage = browser.runtime.getBackgroundPage()

引數

無。

返回值

一個 Promise,如果存在後臺頁面,它將以後臺頁面的 Window 物件進行兌現。如果擴充套件程式不包含後臺頁面,則 Promise 將因錯誤訊息而被拒絕。

示例

假設一個 後臺指令碼 定義了一個函式 foo()

js
// background.js

function foo() {
  console.log("I'm defined in background.js");
}

執行在 彈出視窗 中的指令碼可以直接像這樣呼叫此函式

js
// popup.js

function onGot(page) {
  page.foo();
}

function onError(error) {
  console.log(`Error: ${error}`);
}

let getting = browser.runtime.getBackgroundPage();
getting.then(onGot, onError);

瀏覽器相容性

注意: 此 API 基於 Chromium 的 chrome.runtime API。本文件源自 Chromium 程式碼中的 runtime.json