Chrome 地理位置似乎忽略了 maximumAge 参数

Posted

技术标签:

【中文标题】Chrome 地理位置似乎忽略了 maximumAge 参数【英文标题】:Chrome geolocation seems to ignore maximumAge parameter 【发布时间】:2012-01-04 16:08:49 【问题描述】:

我正在努力在 html 地理位置中使用 maximumAge 参数。它在 Chrome 中的工作方式似乎与规范不符。

我有read through the geolocation API spec,据我所知,如果你将 maximumAge 设置为零,你应该总是得到一个新的位置。

maximumAge 属性表示应用愿意 接受年龄不大于指定的缓存位置 以毫秒为单位的时间。如果 maximumAge 设置为 0,则执行 必须立即尝试获取新的位置对象。设置 maximumAge 到 Infinity 必须确定实现返回一个 缓存位置,无论其年龄如何。如果实现不 有一个可用的缓存位置,其年龄不大于 指定maximumAge,那么它必须获取一个新的位置对象。在 watchPosition() 的情况下,maximumAge 指的是第一个位置 实现返回的对象。

但是,这是我的代码:

function gpsSuccess(pos) 
   var positionDate = new Date(pos.timestamp);
   var currentDate = new Date();
   console.log(positionDate.toLocaleString(), currentDate.toLocaleString());

watchId = navigator.geolocation.watchPosition(gpsSuccess,
    gpsFail, 
        enableHighAccuracy: true,
        maximumAge: 0,
        timeout: 27000
);

我看到以下内容:

Wed Nov 23 2011 10:25:43 GMT+0000 (GMT), Wed Nov 23 2011 10:52:16 GMT+0000 (GMT)

所以这是获得的位置与当前时间之间的半小时差异。

我认为这可能只是卫星时间和当地时间之间的差异,但我一直在反复点击刷新,并且 positionDate 没有改变,即使 currentDate 是。

为什么即使maximumAge设置为零,缓存的位置也会被重复使用?

这是在 Chrome 中,顺便说一句。

【问题讨论】:

我在 Safari-mobile 上也注意到了类似的行为。非常令人沮丧。我希望我知道一种在需要时强制进行新的地理查找的方法。我想,就像你做的那样,将 maximumAge 设置为零会做到这一点(正如规范所解释的那样)。猜不... 似乎根本无法控制这个:***.com/questions/14814256/… 根据您的用例,这个问题可能非常烦人。我通过设置一个标志并忽略成功回调中返回的第一个位置对象来解决这个问题。 面临同样的问题,获取位置(缓存)甚至设备的位置服务被关闭。 【参考方案1】:

这不可能。某些 html5 标签(例如 webkit 语音)也会发生同样的情况,您无法通过代码激活这些标签。抱歉,您对此没有太多控制权。

【讨论】:

以上是关于Chrome 地理位置似乎忽略了 maximumAge 参数的主要内容,如果未能解决你的问题,请参考以下文章

烧瓶登录:Chrome 忽略 cookie 过期?

iPad Safari mobile 似乎忽略了 html5 视频元素的 z-indexing 位置

在 Chrome 中调试时避免不相关的文件不起作用

Chrome javascript地理位置未显示允许/阻止弹出窗口

忽略y轴标题位置

在 Chrome 中打印重复的页眉 [关闭]