#769·camoufox

geolocation:latitude/longitude auto-grant 在 152.0.4-beta.30 中永远不适用 — 权限保持提示状态, getCurrentPosition 卡死,页面计时器冻结

作者: KNawm创建于 2026年9月12日更新于 2026年9月12日

Build: camoufox 152.0.4-beta.30 (官方下载的二进制文件, macOS arm64) 启动模式: 无头模式通过 Juggler 自动化管道; 配置通过 CAMOU_CONFIG 分块环境变量提供; 测试页面从 http://127.0.0.1:<port>/ 提供 (这是一个安全上下文,因此 navigator.geolocation 可用)。预期 (根据 camoufox.com/fingerprint/geolocation 文档):> 位置权限提示将自动接受,如果 geolocation:latitudegeolocation:longitude 设置为 52.5213.405 (以及下面列出的其他变体):- navigator.permissions.query({name:'geolocation'}) 保持 state: "prompt";- getCurrentPosition() 永远不会解析 - 无论成功回调还是错误回调都不会触发;- 在提示正在等待时,页面的定时器被冻结: 7 秒的 setTimeout 监控器永远不会运行,直到探测器放弃;- 子 stderr 显示自动化下提示权限本身无法打开: chrome://juggler/content/TargetRegistry.js, line 637: TypeError: can't access property "getContentDialogManager", this._linkedBrowser.tabDialogBox is undefined。其他 CAMOU_CONFIG 关键字在完全相同的启动中被尊重 (webrtc:ipv4显示为 srflx 候选项,mediaDevices:micros/webcams计数伪造,voices列表注入),因此配置传递和 MaskConfig 管道是活动的 - 只有地理位置自动授权永远不会触发。**尝试的表面 - 每个表面都将permState=prompt` 与未解析的调用一起留下:**

# 表面 观察到的
1 geolocation:latitude + geolocation:longitude 提示正在等待,定时器被冻结
2 #1 + geolocation:accuracy=25 相同
3 #1 + pref permissions.default.geo=1, 以 user.js 用户首选项的形式写入配置文件目录 (标准的 CheckPromptPrefs 路径) 相同
4 通过自动化域中的 nsIPermissionManager 明确的站点授权 不可到达 - Juggler 评估域不暴露 Components/XPConnect
5 通过 permissions.sqlite 预先加载 geo 允许行 (moz_perms: origin='http://127.0.0.1:<port>', type='geo', permission=1, expireType=0, expireTime=0; 从新启动此构建中捕获的架构和 user_version=13 从未假设) 该行在会话后在数据库中保留,但页面仍然读取 prompt 并且 getCurrentPosition 仍然挂起
6 #1–#3 组合 + geo.provider.testing.url / geo.provider.network.url 指向固定位置文档 相同

此处看起来是它的位置: patches/geolocation-spoofing.patch 中的自动授权位于 Geolocation::RegisterRequestWithPrompt 前面的 CheckPromptPrefs 中,受 MaskConfig lat+lon 查找的限制。在此构建中,请求始终通过到提示路径 (然后在 Juggler 下甚至无法打开)。相关的旧问题: #291 (不同的类 - 接受提示后的真实地理位置 - 但表面相同)。

完整诊断启动日志 (每次尝试一行 ...

内容来源: daijro/camoufox