跳转到主要内容
不必为每个浏览器维护单独的 manifest 文件。 Extension.js 允许你用前缀在同一份文件里声明浏览器特定的值,然后在编译时只输出与当前目标匹配的字段。

为什么重要

浏览器之间在 manifest 的几个关键区域仍有差异,比如后台脚本配置和厂商元数据。带前缀的字段让你能保留一份源 manifest.json,同时为 Chromium 系和 Firefox 系目标生成各自正确的产物。

工作原理

Extension.js 扫描 manifest 的键,并按所选浏览器解析带前缀的条目:
  • Chromium 系目标(chromeedgechromium-based)解析:chromium:chrome:edge:
  • Gecko 系目标(firefoxgecko-based)解析:firefox:gecko:
当某个带前缀的键匹配当前目标时,Extension.js 会在输出的 manifest 中把它重写为不带前缀的键。

Chromium 系浏览器(Chrome、Edge 等)

{
  "chromium:background": {
    "service_worker": "sw.js"
  }
}

Firefox

{
  "firefox:background": {
    "scripts": ["sw.js"]
  }
}
你还可以在同一个浏览器家族内针对特定厂商版本:
{
  "chrome:action": {
    "default_title": "Chrome variant"
  },
  "edge:action": {
    "default_title": "Edge variant"
  }
}
这样,service_worker 只会出现在 Chromium 系产物里,而 Firefox 产物里则保留 background.scripts 支持的前缀映射:
前缀包含的目标浏览器
chromium:chromeedgechromium-based
chrome:chromechromium-based
edge:edgechromium-based
firefox:firefoxgecko-basedfirefox-based
gecko:firefoxgecko-basedfirefox-based
它适用于 manifest 中任意层级的任何字段,包括 permissionscontent_scriptsbackground

最佳实践

  • 共享默认值保持无前缀:把通用字段写在普通 manifest 键中,只对浏览器差异的部分加前缀。
  • 行为分歧时再加前缀:当运行时要求不同时再使用浏览器前缀。
  • 在持续集成 (CI) 中按目标分别构建:分别生成并验证每个浏览器的产物(dist/<browser>),以便尽早发现兼容性回归。
  • 用 MDN 验证:在添加仅特定浏览器可用的设置前,使用 MDN Web Docs 确认支持情况。

下一步