检测是不是已经允许 W3 地理位置

Posted

技术标签:

【中文标题】检测是不是已经允许 W3 地理位置【英文标题】:Detect if W3 Geolocation has already been allowed检测是否已经允许 W3 地理位置 【发布时间】:2011-11-04 19:14:34 【问题描述】:

我的网站上有一个谷歌地图,当用户点击“获取当前位置”按钮时,我正在使用 W3 Geolocation 来检测用户的位置。然后它应该在浏览器窗口顶部弹出允许/拒绝信息栏。

我不想提示所有访问者访问地理位置,但我想以某种方式记住用户是否已经允许地理位置并在允许的情况下运行地理位置。

根据我的研究,这是不可能的,但我希望以前有人遇到过这种情况。我认为可以做到这一点的唯一方法是设置一个 cookie。

谢谢!

【问题讨论】:

没有 API 调用可以知道用户是否允许访问位置。只有 getCurrentPosition 或 watchPosition,显示提示。因此,以某种方式设置 cookie 或存储用户选择似乎是唯一的方法。 谷歌浏览器不会再次询问用户是否允许检测他的位置一次。 我没有足够的声望来写评论。该问题仅在谷歌浏览器中发生,因为他们将其删除,但在其他浏览器中没有。我找到的唯一解决方案是使用 cookie,但问题是用户可以转到浏览器设置并禁用本地化,但他们无法知道这一点,用户也可以更改位置而你不会知道。跨度> 【参考方案1】:

这不是你想要的,但我认为它会有所帮助。

根据W3C draft,您可以尝试从浏览器获取任何缓存值(无需用户确认)或回退到自定义方法,如果没有找到缓存值。

假设用户同意提供地理位置,它将被缓存。来自同一 W3C 草案的示例:

// Request a position. We only accept cached positions, no matter what 
// their age is. If the user agent does not have a cached position at
// all, it will immediately invoke the error callback.
navigator.geolocation.getCurrentPosition(successCallback,
                                         errorCallback,
                                         maximumAge:Infinity, timeout:0);

【讨论】:

以上是关于检测是不是已经允许 W3 地理位置的主要内容,如果未能解决你的问题,请参考以下文章

检测用户是不是进入或离开区域 - 地理编码

如何检测变量是不是包含任何内容

如何检测是不是在 HTML 页面上的任意位置按下了某个键?

检测地理位置是不是在复杂多边形中

为啥导航器的位置检测不适用于 iOS 10?

高悬赏!为啥HBuilderx显示未检测到浏览器?我已经安装过chrome浏览器。