【发布时间】: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 设置为零会做到这一点(正如规范所解释的那样)。猜不...
-
似乎根本无法控制这个:stackoverflow.com/questions/14814256/…
-
根据您的用例,这个问题可能非常烦人。我通过设置一个标志并忽略成功回调中返回的第一个位置对象来解决这个问题。
-
面临同样的问题,获取位置(缓存)甚至设备的位置服务被关闭。
标签: javascript html google-chrome geolocation location