0

我们navigator.geolocation.getCurrentPosition()用来获取用户的当前位置。该函数接受三个参数:

  1. 成功获取用户位置后执行的回调函数
  2. 一个可选的回调函数,如果它不成功则执行
  3. 可选设置

如果用户在移动设备(或桌面浏览器)上关闭了位置共享,则将执行第二个回调函数。

在这种情况下,我们会向用户发送一条警告消息,要求他们启用位置共享。

我们发现的问题是,如果他们然后去这样做,然后返回网站并尝试再次单击链接,浏览器似乎已经缓存了来自 的结果getCurrentPosition(),并且它再次执行第二个回调。

如果他们在更新位置设置后刷新网页,那就没问题了。但是我不确定我们是否可以检测到他们何时重新启用了位置共享?

这里有什么解决方法可以防止我们getCurrentPosition()缓存不成功的响应吗? 也许使用watchPosition()我也尝试过使用 watchPosition,但也有同样的问题;当用户更新他们的位置共享设置时,它不会自动更新。

<a href="" id="clickme">Click Me</a>
$(document).ready(function() {
    $('#clickme').on('click', function() {
        navigator.geolocation.getCurrentPosition(
            function() {
                console.log('success');
            },
            function(error) {
                alert('you should enable location sharing');
                console.log('failure');
            },
            {
                timeout: 5000,
                maximumAge: 0,
                enableHighAccuracy: false
            }
        );      

        return false;
    });
});

您可以在此处在 JSFiddle上查看此代码。

  • 禁用位置共享,单击运行,然后单击“单击我”。您应该会收到警报消息和失败响应。
  • 启用位置共享,然后单击“单击我”(无需刷新页面,也无需再次单击“运行”)。您仍然会收到警报消息。
  • 刷新页面,这次你会得到成功响应。
4

0 回答 0