在找
chrome://flags 或 edge://flags? 把它输入地址栏即可,这是浏览器自带的页面。Firefox 没有
firefox://flags,请改用 about:config。如果你切换 flag 是为了测试或构建浏览器扩展,Extension.js 会在 Chrome、Edge 与 Firefox
上按项目自动应用它们,你不需要每次运行都手动传入 flag。30 秒创建你的第一个扩展 →extension.config.* 中配置的浏览器 flag,并在 dev、preview 与 start 流程中应用它们。
Firefox 有 firefox://flags 吗?
Firefox 并不像 Chromium 系浏览器使用 chrome://flags 或 edge://flags 那样使用 firefox://flags。Firefox 通过 about:config(preferences)暴露运行时开关,并接受命令行传入的启动 flag。
如果你搜索过 firefox://flags、firefox //flags、browser://flags、mozilla://flags 或 about flags firefox,你大概率是想在扩展开发期间修改浏览器行为。在 Extension.js 中,这件事分两处来做:
- 用
browserFlags配置 Extension.js 传给浏览器二进制的启动 flag。 - 用 Firefox preferences 配置原本会写在
about:config中的、可复现的 Gecko 运行时行为。
其他浏览器中的 flag
Extension.js 对任何基于 Chromium 的浏览器都以相同方式启动与配置。brave://flags、opera://flags、vivaldi://flags、yandex://flags:它们都基于 Chromium,因此行为与chrome://flags完全一致,Extension.js 会按项目管理它们。internet://flags与browser://flags:这些不是真实存在的浏览器 scheme。你多半是在找chrome://flags(Chromium)或about:config(Firefox)。edge://flags:Edge 就是 Chromium,因此在 Extension.js 中它的表现与 Chrome 完全一样。
extension.config.* 里设置一次,Extension.js
每次运行都会应用。参见下文的 browserFlags。
模板示例
new-browser-flags

工作原理
在extension.config.* 中配置 flag:
browser.<target>.browserFlagscommands.dev|start|preview.browserFlags- 可选的
excludeBrowserFlags,用于移除默认 flag 或用户自定义的 flag(具体行为取决于目标是 Chromium 还是 Firefox)。
flag 能力
配置示例
Chromium 与 Firefox 行为对比
-
Chromium 家族(
chrome、edge、chromium、chromium-based)- 从一组内部默认 flag 出发,然后追加你的
browserFlags。 excludeBrowserFlags会移除匹配的默认 flag 与用户 flag。- Extension.js 自己管理
--load-extension=...,并会从用户传入的 flag 中将其过滤掉。
- 从一组内部默认 flag 出发,然后追加你的
-
Firefox/Gecko 家族(
firefox、gecko-based/firefox-based)- 使用用户传入的
browserFlags(没有像 Chromium 那样的大量默认 flag)。 excludeBrowserFlags会移除匹配的用户 flag,规则与 Chromium 相同。
- 使用用户传入的
= 或 , 时,该 flag 会被移除。所以 --disable-features 也会移除 --disable-features=Translate,而 --dev 永远不会移除 --devtools。
Chromium 默认 flag
启动 Chromium 系浏览器时,Extension.js 会自动应用这些 flag。如果不需要其中某些,可以用excludeBrowserFlags 移除。
始终生效的会话 flag
除了上面的默认表,每次 Chromium 启动还会带上一组固定的会话稳定性 flag。它们可以避免后台计时器、被遮挡的窗口以及渲染进程节流干扰自动化与 AI 驱动的会话。excludeBrowserFlags 无法移除它们:
dev 模式下,Extension.js 才会用三个 flag 接上调试通道:--remote-debugging-port=<derived port>、--remote-debugging-address=127.0.0.1 与 --remote-debugging-pipe。生产模式的启动(start、preview)会跳过这三个。
feature 开关的合并
Chromium 只认重复开关中最后一次出现的那个。因此 Extension.js 会把每一处--enable-features 与 --disable-features 各自合并成一个用逗号连接的开关。默认值、配置与环境变量的值都会参与合并,重复的 feature 名会被去掉。你可以放心地在 browserFlags 里传入 --disable-features=Foo,而不会抹掉默认值。
环境变量开关
EXTENSION_BROWSER_FLAGS会把以空白分隔的 flag 追加到每一次启动。它在配置 flag 之后、也在excludeBrowserFlags过滤之后才应用,因此excludeBrowserFlags无法移除来自这个变量的 flag。EXTENSION_HEADLESS=1(或true)会强制使用--headless=new,除非配置或环境 flag 中已经传入了某种--headless变体。可以把它当作自动化会话的抢焦点防护。
在 Docker、持续集成(CI)或容器化环境中,Extension.js 还会自动应用
--no-sandbox 与 --disable-setuid-sandbox。在 Linux 上,它通过以下任一信号判断处于容器中:
CI=true、存在 /.dockerenv 文件、存在 /run/.containerenv 文件、
REMOTE_CONTAINERS=true、CODESPACES=true,或设置了 container 变量。支持的目标与参考资料
针对基于引擎的目标,需要时可使用二进制 flag:
--chromium-binary=...--gecko-binary=...
最佳实践
- 只加必要的 flag:尽量精简 flag 列表,避免不稳定或不可移植的配置。
- 优先使用
excludeBrowserFlags,而不是整体替换默认值:只移除与你的工作流冲突的部分。 - 不要手动传入
--load-extension:Extension.js 会在内部管理扩展加载相关的 flag。 - 按浏览器家族分别验证:在 Chromium 上可用的 flag,在 Firefox 上可能无效或被忽略。
下一步
- 进一步了解 浏览器 preferences。
- 进一步了解 浏览器 profile。
- 在 可用浏览器 中选择目标。
- 通过
extension.config.*串联 flag 配置。 - 第一次接触扩展工具链?先从 快速开始 概览开始。

