navigator.geolocation не возвращает действительную метку времени с iOS 6
У меня есть довольно простой базовый код 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 продолжают возвращать временную метку UNIX gps_ts, которая соответствует реальному времени, но в iOS 6 мы получаем временные метки, которые переводятся в нечетные даты в промежутке между 1958 и 1969 годами. Похоже, они измеряют что-то хронологическое, поскольку значения увеличиваются с последовательным увеличением использует, но они больше не являются метками времени UNIX текущего времени.
Помощь с этим будет оценена. Я вижу, что есть другие отчеты с поддержкой геолокации iOS 6 (см. https://discussions.apple.com/thread/4313850?start=0&tstart=0), но ничего конкретно об использовании javascript и функциональности меток времени.
1 ответ
Я экспериментировал с этим сегодня. Из того, что я могу сказать timestamp
в iOS "разрешение" в 1000 раз выше, чем в других браузерах (микросекунды вместо миллисекунд). Я написал вспомогательную функцию, подобную этой, чтобы обойти это:
function getGeoTimestampDate(timestamp) {
if (timestamp > 14000000000000) { timestamp = Math.floor(timestamp / 1000); }
return new Date(timestamp);
}
Я смог провести тестирование только на нескольких устройствах (оригинальный iPad и iPhone 4, оба на iOS 6.0.1), поэтому я был бы признателен, если кто-нибудь может подтвердить, работает ли он на других.