Skip to main content
不必為每個瀏覽器各自維護一份 manifest 檔案。 Extension.js 讓你用前綴在同一份檔案內定義瀏覽器專屬的值,在編譯時只輸出符合當前目標的欄位。

為什麼這很重要

瀏覽器在 manifest 的關鍵領域仍有差異,例如背景設定與廠商相關的中繼資料。透過帶前綴的欄位,你可以保留一份來源 manifest.json,同時為 Chromium 家族與 Firefox 家族目標產出對應正確的輸出。

運作方式

Extension.js 會掃描 manifest 鍵值,並針對所選的瀏覽器解析帶前綴的條目:
  • Chromium 家族目標(chromeedgechromium-based,以及分支 braveoperavivaldiyandex)會解析:chromium:chrome:edge:
  • Gecko 家族目標(firefoxgecko-based,以及分支 waterfoxlibrewolf)會解析:firefox:gecko:
當帶前綴的鍵符合當前目標時,Extension.js 會在輸出的 manifest 中將其改寫為不帶前綴的鍵。分支目標會繼承其引擎家族的前綴,因此當你以 bravewaterfox 這類分支為目標時,只帶有 chromium:/firefox: 鍵的 manifest 仍能正確解析。精確的瀏覽器名稱前綴也會符合它自己的目標(例如當你執行 --browser=brave 時的 brave:)。

適用 Chromium 系瀏覽器(Chrome、Edge…)

適用 Firefox

你也可以在同一個瀏覽器家族中針對特定廠商變體做設定:
這讓 service_worker 只會出現在 Chromium 家族的輸出中,同時為 Firefox 輸出保留 background.scripts 支援的前綴對應表: 精確的瀏覽器名稱前綴(例如 brave:vivaldi:waterfox:)只在你以同一個瀏覽器為目標時才會解析。 這對任何層級的任何 manifest 欄位都有效,包含 permissionscontent_scriptsbackground

最佳實務

  • 共用預設值不加前綴:把共用欄位放在一般的 manifest 鍵中,只對瀏覽器專屬的差異加上前綴。
  • 僅在行為分歧時使用前綴:當執行階段需求不同時才使用瀏覽器前綴。
  • 在持續整合(CI)中為每個目標分別建置:產生並驗證每個瀏覽器的輸出(dist/<browser>),及早抓出相容性回歸。
  • 以 MDN 驗證:在加入只支援某瀏覽器的設定前,先用 MDN Web Docs 確認支援度。

下一步