欧盟《数字市场法案》(DMA)生效两年多了,很多人以为它只是纸面规则。Mozilla 刚发布的最新数据打消了这个印象——用户每 10 秒就通过 DMA 浏览器选择界面主动选一次 Firefox,累计超过 600 万次。更关键的是,这些用户的留存率明显高于其他渠道来的用户。这不是被动的默认值,是真实的偏好表达。
选择界面不是摆设
DMA 要求苹果、Google 等平台守门人(gatekeeper)在系统首次设置或更新时弹出浏览器选择界面,列出本地可用浏览器供用户挑选。听起来简单,但此前 iOS 上 Safari 的默认地位几乎不可动摇——用户要么不知道可以换,要么换的路径藏在深层设置里。
选择界面把"换浏览器"从三步隐藏操作变成了一步显式动作。Mozilla 的数据验证了这一点:600 万次选择意味着大量用户在看到选项后,确实点击了 Firefox,而不是随手跳过。
留存率才是硬指标
下载量容易刷,留存率才说明问题。Mozilla 披露,通过选择界面来的 Firefox 用户留存率更高。这背后的逻辑很直白:
- 主动选择 > 被动默认。用户在多个选项中明确点了 Firefox,说明有意图——可能是隐私偏好、可能是对 Safari/Chrome 的不满,也可能只是想试试。有意图的用户更不容易流失。
- 选择界面过滤了无意识用户。那些随手选默认的人不会出现在这 600 万里,留下的是做出决策的人,决策本身就绑定了一定的忠诚度。
对开发者来说,这个信号比市场份额数字更有价值:你的用户群体里,Firefox 用户的"认真程度"可能正在上升。
开发者该做什么准备
更多 Firefox 用户意味着前端兼容性不能再只盯着 Chrome。以下是几个值得立刻检查的点:
1. 用 Feature Detection 替代 Browser Sniffing
如果你的站点还在用 navigator.userAgent 判断功能支持,现在就该改。Firefox 和 Chrome 在同一 API 上的支持节奏不同,硬编码浏览器名只会制造假 bug。
// ❌ 旧做法:按浏览器名分支,Firefox 会踩坑
if (navigator.userAgent.includes('Chrome')) {
enableNewFeature();
}
// ✅ 新做法:按能力分支,任何浏览器只要支持就能用
if ('EyeDropper' in window) {
enableEyeDropper();
}
// 更通用的能力检测模板
function supportsAPI(apiName, scope = window) {
return apiName in scope && typeof scope[apiName] === 'function';
}
// 批量检测,输出兼容性报告
const apis = ['EyeDropper', 'ViewTransition', 'SharedStorage'];
const report = apis.map(api => ({
api,
supported: supportsAPI(api)
}));
console.table(report);
把这段代码丢到你的入口页面试一下,你会立刻看到 Firefox 和 Chrome 的差异在哪里。
2. 在 CI 里加入 Firefox 无头测试
大多数项目的 CI 只跑 Chrome 无头测试。加一行 Firefox 配置的成本很低,收益是提前捕获兼容性问题:
# GitHub Actions 示例:同时跑 Chrome 和 Firefox 无头测试
jobs:
test:
runs-on: ubuntu-latest
strategy:
matrix:
browser: [chrome, firefox]
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 20
- run: npm ci
- name: Install browsers
run: |
if [ "$BROWSER" = "firefox" ]; then
npx playwright install firefox
else
npx playwright install chromium
fi
env:
BROWSER: ${{ matrix.browser }}
- run: npx playwright test --project=${{ matrix.browser }}
Playwright 对 Firefox 的无头支持已经稳定,不需要额外折腾 WebDriver。
3. Linux 上快速设置 Firefox 为默认浏览器(给团队推一条命令)
如果你在团队内部推广 Firefox,一条命令比口头建议有效:
# Debian/Ubuntu:设置 Firefox 为系统默认浏览器
xdg-settings set default-web-browser firefox.desktop
# 验证当前默认浏览器
xdg-settings get default-web-browser
# macOS 用户可以在 Firefox 内操作:
# Settings > General > Make Default(会跳转系统偏好设置)
还需要注意的边界
- 600 万次选择集中在欧盟地区,全球其他市场没有 DMA 选择界面,Firefox 增长模式完全不同。
- iOS 上的 Firefox 仍然基于 WebKit 引擎,这是苹果对第三方浏览器的硬性限制。DMA 第二轮执法可能改变这一点,但目前 iOS Firefox 和 iOS Safari 的渲染内核一致,兼容性差异主要在 UI 和隐私功能层面。
- 选择界面的设计细节影响很大。选项排列顺序、默认高亮、说明文案都会左右用户选择,Mozilla 的数据反映的是当前界面设计下的结果,不是某种"自然偏好"。
检查清单
在 DMA 带来的浏览器多样性趋势下,前端团队可以做这几件事:
| 动作 | 优先级 | 预估耗时 |
|---|---|---|
| 把 UA sniffing 改成 feature detection | 高 | 1-2 天 |
| CI 加入 Firefox 无头测试 | 高 | 半天 |
用 console.table 做一次 API 兼容性扫描 |
中 | 1 小时 |
| 检查站点在 Firefox 下的视觉差异 | 中 | 2 小时 |
| 监控 Firefox 用户占比变化(Analytics) | 低 | 持续 |
DMA 证明了一件事:当选择权被真正交到用户手里,用户会用。600 万次不是偶然,是默认垄断被打破后的自然释放。作为开发者,现在让站点在 Firefox 下跑得和 Chrome 一样好,不是公益,是务实。