runtime.getBackgroundPage()

检索当前扩展程序内部运行的后台页面的 Window 对象。如果后台页面是非持久性的(事件页面)并且未运行,则会启动后台页面。

这为其他特权扩展脚本提供了一种方便的方法,以便直接访问后台脚本的作用域。这使它们能够访问在该作用域中定义的变量或调用函数。“特权脚本”此处包括在 选项页面 中运行的脚本,或在 浏览器操作页面操作 弹出窗口中运行的脚本,但不包括 内容脚本

请注意,使用 constlet 声明的变量不会出现在此函数返回的 Window 对象中。

另请注意,此方法无法在 Firefox 的私有窗口中使用 - 它始终返回 null。有关更多信息,请参阅 bugzilla 上的相关错误

如果后台页面是事件页面,则系统将在解析 Promise 之前确保其已加载。

这是一个返回 Promise 的异步函数。

注意:在 Firefox 中,此方法无法在隐私浏览模式下使用 - 它始终返回 null。有关更多信息,请参阅 Firefox 错误 1329304

在 Chrome 中,此方法仅适用于持久性后台页面,而持久性后台页面在清单文件 V3 中不可用,因此请考虑使用清单文件 V2。有关详细信息,请参阅 此处

请考虑使用 runtime.sendMessage()runtime.connect(),它们在上述两种情况下都能正常工作。

语法

js
let gettingPage = browser.runtime.getBackgroundPage()

参数

无。

返回值

一个 Promise,如果存在,则会使用后台页面的 Window 对象来完成。如果扩展程序不包含后台页面,则 Promise 会因错误消息而被拒绝。

浏览器兼容性

BCD 表格仅在启用 JavaScript 的浏览器中加载。

示例

假设一个 后台脚本 定义了一个函数 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