我们navigator.geolocation.getCurrentPosition()
用来获取用户的当前位置。该函数接受三个参数:
- 成功获取用户位置后执行的回调函数
- 一个可选的回调函数,如果它不成功则执行
- 可选设置
如果用户在移动设备(或桌面浏览器)上关闭了位置共享,则将执行第二个回调函数。
在这种情况下,我们会向用户发送一条警告消息,要求他们启用位置共享。
我们发现的问题是,如果他们然后去这样做,然后返回网站并尝试再次单击链接,浏览器似乎已经缓存了来自 的结果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上查看此代码。
- 禁用位置共享,单击运行,然后单击“单击我”。您应该会收到警报消息和失败响应。
- 启用位置共享,然后单击“单击我”(无需刷新页面,也无需再次单击“运行”)。您仍然会收到警报消息。
- 刷新页面,这次你会得到成功响应。