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 确认支持情况。

下一步