Только запрашивать информацию о геолокации в ответ на жест пользователя?


Я только что обновился до 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 3

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.