检查浏览器是不是在操作系统级别阻止了位置设置

Posted

技术标签:

【中文标题】检查浏览器是不是在操作系统级别阻止了位置设置【英文标题】:Check if a browser has location settings blocked at an operating system level检查浏览器是否在操作系统级别阻止了位置设置 【发布时间】:2021-01-05 02:57:21 【问题描述】:

我有一个出于监管目的需要用户位置的网站(您无法从不符合条件的国家/地区访问该网站)。

当用户登录时,我会检查navigator.geolocation.getCurrentPosition,如果失败,我会处理各种返回的错误代码,并在用户拒绝我们在浏览器中使用该位置时提醒用户(我专门谈论的是 Chrome在这里)。

但我最近注意到,Mac OS 中的“系统偏好设置”>“安全和隐私”>“定位服务”有时会为 Chrome 关闭。这是来自更新还是因为用户设置它对我来说并不重要。

我想知道是否有办法查询浏览器 api 并找出操作系统是否已阻止位置,以便我可以向用户提供更好的错误消息。如果您在操作系统层阻止了它,那么navigator.geolocation.getCurrentPosition 不会返回任何内容,而不是如果它在浏览器级别被阻止,则会出现错误。

我不相信我会从navigator.geolocation 那里得到任何信息——尽管我可能是错的。我在网上寻找过这个问题的答案,但似乎所有内容都提到了navigator.geolocation,我已经在处理这个问题了。

如果不清楚,请告诉我,但我正在尝试从浏览器级别的操作系统检测位置设置。

谢谢

【问题讨论】:

无法在浏览器中使用 javascript 查询操作系统级别的元数据。 Spec @RandyCasburn 干杯,不,我明白了,我并不想查询操作系统本身。我的意思是显然浏览器知道该位置被阻止,所以我想知道浏览器是否会在我可以查询的任何地方显示。就像我想问中间人而不是操作系统一样 这就是为什么我包含了一个指向规范的链接。它将回答这些问题。如果您向下滚动到用户代理(浏览器)的要求,您将看不到浏览器支持该要求的任何要求,并且该规范中没有 API 来请求该信息。 @RandyCasburn 干杯,这有点儿鸡毛蒜皮——试图让用户知道时会很痛苦。我会想办法的,谢谢。 【参考方案1】:

@BrettEast 你可以使用 timeout 参数来解决:

navigator.geolocation.getCurrentPosition(position => 
  console.log(position)
, error => 
    console.error(error)
, 
  timeout: 10000,
  maximumAge: 10000,
  enableHighAccuracy: true
)

如果该位置将从操作系统中关闭,则在 10000 毫秒后,它将进入错误块 GeolocationPositionError code: 3, message: "Timeout expired"。 希望它会有所帮助。

【讨论】:

谢谢,我确实尝试过,但最终选择了自定义超时方法。我不想在超时时终止尝试,以防用户连接缓慢。 6 秒后,我向用户显示他们可能遇到位置问题的消息。通过不超时,他们可以重新打开位置信息,然后它会立即工作,而无需他们再次尝试。

以上是关于检查浏览器是不是在操作系统级别阻止了位置设置的主要内容,如果未能解决你的问题,请参考以下文章

浏览器提示已经阻止此站点以不安全的方式使用ActiveX 控件,怎么解决?

在设计 iOS 应用程序时,是不是可以在操作系统级别做一些事情,比如阻止用户使用其他应用程序?

在网站上运行Java插件,结果被安全设置阻止了,怎么设置

阻止了此文件,因为它没有有效的数字签名以验证其发行者怎么回事啊?

浏览器阻止打开active控件怎么办

win11升级后,IE浏览器找不到安全级别和可信站点级别设置?请问怎么操作?