background

型別 Object
必填
Manifest 版本 2 或更高
示例
json
"background": {
  "scripts": ["background.js"]
}

使用 background 鍵來包含一個或多個後臺指令碼、後臺頁面或 Service Worker 到您的擴充套件程式中。

後臺指令碼是存放需要維護長期狀態或執行長期操作的程式碼的地方,這些操作獨立於任何特定網頁或瀏覽器視窗的生命週期。

除非將 persistent 指定為 false,否則後臺指令碼會在擴充套件程式載入時立即載入,並一直保持載入狀態,直到擴充套件程式被停用或解除安裝。如果您請求了必要的 許可權,您可以在指令碼中使用任何 WebExtension API。

有關更多詳細資訊,請參閱 後臺指令碼

background 鍵是一個物件,其中必須包含以下屬性之一(有關這些屬性的支援情況,請參閱 瀏覽器支援

page

如果您需要在後臺頁面中包含特定內容,可以使用 page 屬性來定義一個頁面。這是一個 string,表示相對於 manifest.json 檔案的一個路徑,指向包含在您的擴充套件程式包中的 HTML 文件。

如果您使用此屬性,則不能使用 scripts 指定後臺指令碼,但您可以像普通網頁一樣從頁面中包含指令碼。

scripts

一個 string 型別的 array,其中每個字串都是一個 JavaScript 原始檔的路徑。路徑相對於 manifest.json 檔案本身。這些是在擴充套件程式的後臺上下文中執行的指令碼。

這些指令碼共享相同的 window 全域性上下文。

指令碼按其在陣列中出現的順序載入。

如果您指定了 scripts,則會建立一個空頁面供您的指令碼執行。

注意: 如果您想透過 <script> 標籤從遠端位置獲取指令碼(例如,<script src = "https://code.jquery.com/jquery-3.6.0.min.js">),您需要更改擴充套件程式 manifest.json 檔案中的 content_security_policy 鍵。

service_worker

指定一個 JavaScript 檔案作為擴充套件程式的 Service Worker。Service Worker 是一個後臺指令碼,充當擴充套件程式的主要事件處理程式。

background 鍵還可以包含此可選屬性

persistent

一個 boolean 值。

如果省略,此屬性在 Manifest V2 中預設為 true,在 Manifest V3 中預設為 false。在 Manifest V3 中設定為 true 會導致錯誤。

  • true 表示後臺頁面從擴充套件程式載入或瀏覽器啟動時開始一直保留在記憶體中,直到擴充套件程式解除安裝或停用,或者瀏覽器關閉(即,後臺頁面是持久的)。
  • false 表示後臺頁面可能在空閒時從記憶體中解除安裝,並在需要時重新建立。這類後臺頁面通常被稱為事件頁面,因為它們會被載入到記憶體中,以便後臺頁面處理它已添加了偵聽器的事件。偵聽器的註冊在頁面從記憶體中解除安裝時是持久的,但其他值不是持久的。如果您想在事件頁面中持久化儲存資料,則應使用 storage API
preferred_environment

一個 string 型別的 array,列出按優先順序順序排列的首選環境。

如果 background 指定了 service_worker 以及 pagescripts,則此屬性允許擴充套件程式告知瀏覽器使用哪個後臺上下文(如果可用)。有關主要瀏覽器支援的環境的詳細資訊,請參閱 瀏覽器支援

  • document 請求瀏覽器使用擴充套件程式的後臺指令碼作為文件(如果支援)。
  • service_worker 請求瀏覽器將擴充套件程式的後臺指令碼作為 Service Worker 執行(如果支援)。

Chrome 只支援 Service Worker,因此會忽略此鍵。如果省略,Firefox 和 Safari 會將後臺指令碼作為文件執行。如果擴充套件程式指定了 scripts 並且 preferred_environment 設定為 service_worker,Safari 則使用 Service Worker 上下文。

type

一個 string 值。

確定 scripts 中指定的指令碼是否作為 ES 模組載入。

  • classic 表示後臺指令碼或 Service Worker 不作為 ES 模組包含。
  • module 表示後臺指令碼或 Service Worker 作為 ES 模組包含。這使後臺頁面或 Service Worker 能夠 import 程式碼。

如果省略,此屬性預設為 classic

瀏覽器支援

scriptspageservice_worker 屬性在不同瀏覽器中的支援情況如下:

  • Chrome
    • 支援 background.service_worker
    • 僅在 Manifest V2 擴充套件程式中支援 background.scripts(和 background.page)。
    • 在 Chrome 121 之前,Chrome 會拒絕載入包含 background.scriptsbackground.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。

為了說明,這是一個支援 scriptsservice_worker 的跨瀏覽器擴充套件程式的示例。該示例具有以下 manifest.json 檔案:

json
{
  "name": "Demo of service worker + event page",
  "version": "1",
  "manifest_version": 3,
  "background": {
    "scripts": ["background.js"],
    "service_worker": "background.js"
  }
}

並且,background.js 包含:

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 作為後臺指令碼。

示例

json
  "background": {
    "scripts": ["jquery.js", "my-background.js"]
  }

載入兩個後臺指令碼。

json
  "background": {
    "page": "my-background.html"
  }

載入自定義後臺頁面。

瀏覽器相容性