navigator.geolocation 不返回 iOS 6 的有效时间戳

Posted

技术标签:

【中文标题】navigator.geolocation 不返回 iOS 6 的有效时间戳【英文标题】:navigator.geolocation does not return valid timestamp with iOS 6 【发布时间】:2012-11-14 22:36:46 【问题描述】:

我在浏览器应用中有一些非常基本的 GeoLocation 代码,它必须报告纬度/经度和时间戳的准确 GPS 值。

这一直适用于 android 设备和 iPhone 至 ios 5.1.1。

现在我们的一个用途已经升级到 iOS 6.0.1,返回的时间戳现在都无效了。

javascript代码的基本形式:

navigator.geolocation.getCurrentPosition(foundLocation, noLocation,  enableHighAccuracy: accuracyVal, timeout: timeoutVal, maximumAge: maxageVal 

function foundLocation(position) 
    var lat = position.coords.latitude;
    var long = position.coords.longitude;
var gps_ts =  position.timestamp;

Android 设备继续返回与实际时间匹配的 gps_ts UNIX 时间戳,但在 iOS 6 中,我们得到的时间戳转换为 1958 年到 1969 年间的奇数日期时间。它们似乎是按时间顺序测量的,因为这些值随着连续使用而增加,但它们不再是当前时间的 UNIX 时间戳。

我们将不胜感激。我看到还有其他支持 iOS 6 地理定位的报告(请参阅https://discussions.apple.com/thread/4313850?start=0&tstart=0),但没有专门关于 javascript 使用和时间戳功能。

【问题讨论】:

【参考方案1】:

我今天一直在尝试这个。据我所知,iOS 中的timestamp 的“分辨率”基本上是其他浏览器的 1000 倍(微秒而不是毫秒)。我写了一个这样的辅助函数来解决它:

function getGeoTimestampDate(timestamp) 
    if (timestamp > 14000000000000)  timestamp = Math.floor(timestamp / 1000); 
    return new Date(timestamp);

我只能在几台设备上进行测试(一台原始 iPad 和一台 iPhone 4,都在 iOS 6.0.1 上)所以如果有人能确认它是否适用于其他设备,我将不胜感激。

【讨论】:

以上是关于navigator.geolocation 不返回 iOS 6 的有效时间戳的主要内容,如果未能解决你的问题,请参考以下文章

navigator.geolocation.getCurrentPosition 在 firefox 和 chrome 之间返回不同?

navigator.geolocation.getCurrentPosition() 方法在某些设备中返回位置请求超时 react-native

使用 navigator.geolocation.getCurrentPosition();同步的

navigator.geolocation.getcurrentPosition() 未获取纬度和经度值

navigator.geolocation.getCurrentPosition():如果用户说“不”,则触发回调?

JS新API标准 地理定位(navigator.geolocation)