Только запрашивать информацию о геолокации в ответ на жест пользователя?
Я только что обновился до Chrome 64 и начал замечать это сообщение в нашем веб-приложении:
[Violation] Only request geolocation information in response to a user gesture.
Это кажется чрезмерно ограничительным. Мне не нужно нажимать кнопку "Обновить местоположение" несколько раз, когда я перемещаюсь в Google Maps. Какова альтернатива опросу местоположения?
В настоящее время мы используем следующий код:
let locInt = self.setInterval(function(){
navigator.geolocation.getCurrentPosition(geoSuccess, geoError, geoOptions);
},5000);
Наше приложение основано на местоположении и зависит от постоянно обновляемой позиции. Какой здесь предпочтительный метод?
2 ответа:
Метод
watchPosition()
позволяет зарегистрировать обработчик, который браузер вызывает автоматически при каждом изменении положения устройства. Это предпочтительнее опроса.id = navigator.geolocation.watchPosition(success[, error[, options]])
Https://developer.mozilla.org/en-US/docs/Web/API/Geolocation/watchPosition
Кажется, есть рекомендация от Google Не загружать геолокацию на странице load:
Пользователи не доверяют или путают страницы, которые автоматически запрашивают их местоположение при загрузке страницы. Вместо того чтобы автоматически запрашивать местоположение пользователя при загрузке страницы, свяжите запрос с жестом пользователя, таким как нажатие кнопки" найти магазины рядом со мной". Убедитесь, что жест четко и недвусмысленно выражает потребность пользователя в местоположение.
И не имеет значения, используете ли вы
watchPosition()
илиgetCurrentPosition()
:Lighthouse собирает JavaScript, который был выполнен при загрузке страницы. Если этот код содержит вызовы геолокации.getCurrentPosition () или геолокация.watchPosition (), и разрешение геолокации еще не было предоставлено, тогда было запрошено местоположение пользователя.
Мы также заметили, что существует огромная задержка в получении геолокации пользователя с момента обновления Chrome.