runtime.getBackgroundPage()
检索当前扩展程序中正在运行的后台页面的 Window 对象。如果后台页面是非持久性的(事件页面)并且未运行,则会启动后台页面。
这为其他特权扩展脚本提供了一种便捷的方式来直接访问后台脚本的范围。这使它们能够访问该范围中定义的变量或调用函数。“特权脚本”在此处包括在 选项页面 中运行的脚本,或在 浏览器操作 或 页面操作 弹出窗口中运行的脚本,但 *不* 包括 内容脚本。
请注意,使用 const 或 let 声明的变量不会出现在此函数返回的 Window 对象中。
另请注意,此方法在 Firefox 的隐私模式窗口中不可用 — 它始终返回 null。有关更多信息,请参阅 Bugzilla 上的相关 bug。
如果后台页面是事件页面,系统将确保在解析 Promise 之前加载它。
这是一个异步函数,返回一个 Promise。
注意: 在 Firefox 中,此方法不能在隐私浏览模式下使用 — 它始终返回 null。有关更多信息,请参阅 Firefox bug 1329304。
在 Chrome 中,此方法仅适用于持久性后台页面,而 Manifest V3 中不提供持久性后台页面,因此请考虑使用 Manifest V2。有关详细信息,请参阅 迁移到服务工作线程。
考虑使用 runtime.sendMessage() 或 runtime.connect(),它们在上述两种情况下都能正常工作。
语法
let gettingPage = browser.runtime.getBackgroundPage()
参数
无。
返回值
一个 Promise,如果存在后台页面,它将以后台页面的 Window 对象进行兑现。如果扩展程序不包含后台页面,则 Promise 将因错误消息而被拒绝。
示例
假设一个 后台脚本 定义了一个函数 foo()
// background.js
function foo() {
console.log("I'm defined in background.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。