1

我正在使用以下内容成功捕获用户的位置(移动浏览器):

<script>
if ( navigator.geolocation ) {
navigator.geolocation.getCurrentPosition(handlePosition);
}
function handlePosition(pos) {
    //this passes lat/long to additional code
 }
</script>

这可行,但通常浏览器似乎会缓存位置数据。调用此地理定位代码的页面显示了与用户位置相关的信息,因此用户可以移动(更改位置),重新加载页面,但使用之前的位置数据(显示不正确的数据)。有时页面必须刷新一次或什至两次才能使页面使用新的位置数据。

有谁知道每次执行脚本时强制代码获取和使用“最新”位置数据的任何方法?

FWIW,我在 iOS Safari (6.1) 中遇到问题。尚未能够在 Android 中进行测试。

感谢您的阅读和任何帮助。

4

2 回答 2

3

编辑:正如 Oleksiy 在他的回答中所写,Geolocation API 现在支持这一点。您可以添加{maximumAge: 0}作为 的第三个选项参数getCurrentPosition如规范中所述,PositionOptions 中还有一个超时和高精度选项。

您的导航器调用将更改为以下内容:

navigator.geolocation.getCurrentPosition(
  handlePosition, 
  (error)=>{}, 
  {maximumAge:0}
);

没有做不到。除了示例中的代码之外,您无法控制浏览器的地理位置。html5 地理位置 api 非常非常有限,这很痛苦。我还有一个问题,是否可以询问是否已经授予了域的许可,并且答案也是否定的。

问题是 api 是在浏览器本身中实现的,而这些功能没有端点。

您可以做的是在 js 中创建一个数组来存储以前的位置,然后再针对该数组更新视图测试以查看是否有过时的位置。

于 2013-02-11T14:46:57.513 回答
3

你现在确实有这个能力。getCurrentPosition 接受三个参数:successfailureoptions

尝试这个:

<script>
if ( navigator.geolocation ) {
navigator.geolocation.getCurrentPosition(handlePosition, (error)=>{}, {maximumAge:0});
}
function handlePosition(pos) {
    //this passes lat/long to additional code
 }
</script>
于 2018-08-26T17:31:54.827 回答