background
| 类型 | Object |
|---|---|
| 必填 | 否 |
| Manifest 版本 | 2 或更高 |
| 示例 |
json |
使用 background 键来包含一个或多个后台脚本、后台页面或 Service Worker 到您的扩展程序中。
后台脚本是存放需要维护长期状态或执行长期操作的代码的地方,这些操作独立于任何特定网页或浏览器窗口的生命周期。
除非将 persistent 指定为 false,否则后台脚本会在扩展程序加载时立即加载,并一直保持加载状态,直到扩展程序被禁用或卸载。如果您请求了必要的 权限,您可以在脚本中使用任何 WebExtension API。
有关更多详细信息,请参阅 后台脚本。
background 键是一个对象,其中必须包含以下属性之一(有关这些属性的支持情况,请参阅 浏览器支持)
page |
如果您需要在后台页面中包含特定内容,可以使用 如果您使用此属性,则不能使用 |
scripts |
一个 这些脚本共享相同的 脚本按其在数组中出现的顺序加载。 如果您指定了
注意: 如果您想通过 |
service_worker |
指定一个 JavaScript 文件作为扩展程序的 Service Worker。Service Worker 是一个后台脚本,充当扩展程序的主要事件处理程序。 |
background 键还可以包含此可选属性
persistent |
一个 如果省略,此属性在 Manifest V2 中默认为
|
preferred_environment |
一个 如果
Chrome 只支持 Service Worker,因此会忽略此键。如果省略,Firefox 和 Safari 会将后台脚本作为文档运行。如果扩展程序指定了 |
type |
一个 确定
如果省略,此属性默认为 |
浏览器支持
scripts、page 和 service_worker 属性在不同浏览器中的支持情况如下:
- Chrome
- 支持
background.service_worker。 - 仅在 Manifest V2 扩展程序中支持
background.scripts(和background.page)。 - 在 Chrome 121 之前,Chrome 会拒绝加载包含
background.scripts或background.page的 Manifest V3 扩展程序。从 Chrome 121 开始,在 Manifest V3 扩展程序中存在这些属性会被忽略。
- 支持
- Firefox
- 不支持
background.service_worker(请参阅 Firefox bug 1573659)。 - 如果未指定
service_worker或 service worker 功能被禁用,则支持background.scripts(或background.page)。在 Firefox 120 之前,如果存在service_worker,Firefox 不会启动后台页面(请参阅 Firefox bug 1860304)。从 Firefox 121 开始,无论是否存在service_worker,后台页面都会按预期启动。
- 不支持
- Safari
- 支持
background.scripts(或background.page)和background.service_worker。 - 当两者都指定时,Safari 会使用
background.scripts(或background.page),除非preferred_environment设置为service_worker。 - 当
preferred_environment设置为service_worker且未指定background.service_worker时,如果存在background.scripts,Safari 会从background.scripts生成一个 Service Worker。
- 支持
为了说明,这是一个支持 scripts 和 service_worker 的跨浏览器扩展程序的示例。该示例具有以下 manifest.json 文件:
{
"name": "Demo of service worker + event page",
"version": "1",
"manifest_version": 3,
"background": {
"scripts": ["background.js"],
"service_worker": "background.js"
}
}
并且,background.js 包含:
if (typeof browser === "undefined") {
// Chrome does not support the browser namespace yet.
globalThis.browser = chrome;
}
browser.runtime.onInstalled.addListener(() => {
browser.tabs.create({ url: "http://example.com/first-run.html" });
});
当扩展程序执行时,会发生以下情况:
- 在 Chrome 中,使用
service_worker属性,并且会启动一个 Service Worker 来打开标签页,因为在 Manifest V3 扩展程序中,Chrome 只支持 Service Worker 作为后台脚本。 - 在 Firefox 中,使用
scripts属性,并且会启动一个脚本来打开标签页,因为 Firefox 只支持脚本作为后台脚本。 - 在 Safari 中,使用
service_worker属性,并且会启动一个 Service Worker 来打开标签页,因为 Safari 优先使用 Service Worker 作为后台脚本。
示例
"background": {
"scripts": ["jquery.js", "my-background.js"]
}
加载两个后台脚本。
"background": {
"page": "my-background.html"
}
加载自定义后台页面。
浏览器兼容性
加载中…