Использование geolocation.watchPosition() в мобильном сафари с использованием служб определения местоположения

Выходные географические координаты точны только при первой загрузке, проблема заключается в том, что время ожидания экрана iPhone истекает, а службы определения местоположения также истекают. И если я снова открою сафари, геокоординаты будут отключены на 100 метров. То же самое произойдет, если я переведу приложение Safari в фоновый режим. Проблема устранена, если я перезагружу вкладку сафари с запросом геолокации или если я очистю кеш приложения сафари и снова открою сафари. Почему это происходит? Мой вариант использования включает в себя показ пользователю стрелки, которая ведет к месту назначения. Таким образом, вполне вероятно, что телефон время от времени отключается для пользователя, что приводит к тайм-ауту службы определения местоположения. iOS Chrome не имитирует это поведение и работает должным образом, то есть географические координаты всегда являются точными после того, как вкладка находится в фокусе и/или время ожидания экрана.


person jasan    schedule 30.10.2016    source источник


Ответы (1)


Я не знаю, почему именно это происходит, но это происходит и со мной. Мне удалось обойти проблему, используя window.setInterval для вызова функции каждые 5 секунд или около того, которая проверяет, было ли обновлено местоположение. Если нет, то функция останавливается и перезапускает часы геолокации.

Перезапуск часов геолокации имеет тот же эффект, что и перезагрузка страницы, т.е. точность снова становится намного лучше, и обновления местоположения возобновляются. Надеюсь, это поможет!

person Chadwick Wood    schedule 01.08.2017
comment
Это сработало для меня. Спасибо. Предложение: добавьте прослушиватель событий для события focus (window.addEventListener('focus', func)) и перезапустите watchPosition в func. Лучший способ сделать это — сохранить возвращаемое значение из watchPosition, чтобы при срабатывании прослушивателя фокуса вы могли использовать navigator.geolocation.clearWatch(‹watchPos return value›) для очистки предыдущего watchPosition. Затем вы снова вызываете navigator.geolocation.watchPosition и сохраняете возвращаемое значение для следующего раза. Дополнительную информацию см. здесь: developer.mozilla.org/en- США/документы/Интернет/API/геолокация/ - person namklabs; 17.07.2020