Для веб-приложения, когда пользователь выбирает переключатель в предыдущем несвязанном поле, я инициирую местоположение для следующего шага, вызывая tryLocation().
const attemptLocation = () => {
if ("geolocation" in navigator) {
Возможные сценарии:
Works !
allow
местоположение.Как обнаружить это изменение, которое они сделали с block
на allow
в браузере, потому что прямо сейчас
В Chrome: страница не обнаруживает изменение на allow
, и пользователи получают
застрявший.
В Firefox: если пользователь не нажмет remember this selection
браузер продолжает задавать один и тот же allow or not
вопрос, даже когда пользователь
сказал allow
и обновил страницу.
В Edge: когда пользователь разрешает, местоположение обновляется и works
, но снова только после обновления страницы и начала заново.
Чтобы упростить вопрос: После загрузки страницы пользователь, который заблокировал местоположение, переходит с блокировки на разрешение местоположения, как я могу предупредить («спасибо, что изменили местоположение с блокировки на разрешение местоположения»)?
@apokryfos Как определить, когда пользователь обновился с block
на allow
местоположение в браузере? Они делают это не в приложении, а в браузере.
Пробовали ли вы PermissionStatus: событие изменения
@GabrielePetrioli Кажется, это ответ моего двухминутного теста. Он реагирует на изменения местоположения, и я вижу в console.info
@GabrielePetrioli, вы должны опубликовать это как ответ, прежде чем это сделает кто-то другой. Не могу найти хороший дубликат (должен быть там)
@ 0stone0 stackoverflow.com/questions/7463367/… кажется связанным, но не дубликатом.
В вашем приложении, используя useEffect()
, когда ваше приложение монтируется, проверьте это:
if ("geolocation" in navigator) {
console.info("Available");
} else {
console.info("Not Available");
}
Если это Available
, вы можете получить доступ к различным свойствам геолокации. Если вы не можете получить доступ к этим свойствам, значит, пользователь отключил доступ к местоположению.
На основе этого вы можете создать некоторую логику состояний, используя хук useState()
для использования в вашем приложении.
Спасибо Дев. UseEffect только определяет, была ли смонтирована страница, или она может перезапуститься на основе изменяющейся переменной. В этом случае пользователь мог загрузить страницу, пойти выпить кофе, вернуться и разрешить определение местоположения. Как я могу обнаружить, что они изменились на allow
местоположение? Другими словами, я могу активировать useEffect, но что должно вызывать этот useEffect, когда пользователь переходит в allow
местоположение?
Разве вы не поместили бы navigator
в массив зависимостей для useEffect
?
Конечно, я могу попробовать
Благодаря комментарию @GabrielePetrioli. В приведенном ниже коде используется navigator.permissions.query
Событие изменения статуса разрешений
Я проверяю, было ли предоставлено разрешение, и обновляю приложение, вызывая функцию, которая обновляет местоположение.
const [locationAccess, setLocationAccess] = useState(false);//user changes in browser
...
//check user location changes in navigator
navigator.permissions.query({ name: 'geolocation' }).then((permissionStatus) => {
permissionStatus.onchange = () => {
setLocationAccess(permissionStatus.state= = "granted")
if (permissionStatus.state= = "granted") {
attemptLocation();
}
};
});
Пожалуйста, удалите тернарный оператор и нас setLocationAccess(permissionStatus.state= = "granted")
Я не уверен, что вопрос здесь