直接禁用 geo.enabled 和 dom.geolocation.enabled 可彻底禁用 geolocation api,使 navigator.geolocation 调用立即报 permissiondeniederror 且无弹窗;全局禁用比界面层“阻止新请求”更彻底,后者仅抑制提示但脚本仍执行并报错。

geo.enabled 和 dom.geolocation.enabled 这两个配置项,就能从底层切断所有地理位置请求——包括网页主动调用 navigator.geolocation.getCurrentPosition() 时的静默弹窗,比单纯设“阻止新请求”更彻底。
为什么全局设“阻止”还不够?
火狐在“隐私与安全→权限→位置”里选“阻止新请求”,只影响用户界面层的弹窗提示,但部分网站仍会触发 getCurrentPosition() 调用,导致控制台报错、脚本卡顿,甚至某些依赖定位的页面逻辑异常。真正静默,得让 API 根本不可用。
修改 about:config 彻底禁用 Geolocation API
这是最干净的方案,适用于明确不需要任何定位功能的用户:
- 在地址栏输入
about:config,点击“接受风险并继续” - 搜索
geo.enabled,双击将其值改为false - 再搜索
dom.geolocation.enabled,同样双击设为false - 无需重启,刷新任意含定位代码的页面(如
https://example.com中执行navigator.geolocation.getCurrentPosition(() => {})),控制台会直接报Geolocation is not supported,且无弹窗、无提示
站点级屏蔽 vs 全局禁用:选哪个?
如果你只对个别网站反感(比如天气站总要定位,但地图类应用需要),就别动 about:config:
- 访问该网站 → 点地址栏锁形图标 → “设置” → 把“位置”权限设为“阻止”
- 或打开
about:permissions,搜索域名,在“地理位置”列点下拉菜单选“阻止” - 注意:已授权过的网站,得先去
about:preferences#privacy→ “位置”→“设置…”里手动“移除”历史记录,否则旧授权可能缓存生效
容易被忽略的关键点
改完 about:config 后,navigator.geolocation 对象本身仍存在,但调用 getCurrentPosition() 或 watchPosition() 会立即以 PermissionDeniedError 拒绝,不走提示流程。这点和 Chrome 不同——Chrome 即使禁用定位,API 仍可能返回 NotSupportedError 或空对象。Firefox 的行为更一致,但也意味着前端代码若没做 if (navigator.geolocation) 判断,可能直接崩掉。











