Как продолжить выполнение кода, если пользователь не ответил на геолокации JavaScript? - PullRequest
0 голосов
/ 03 июля 2019

У нас есть веб-страница, которая запрашивает геолокацию пользователя при регистрации.

На веб-странице используется navigator.geolocation.getCurrentPosition( ... ).

Однако мы заметили, что на некоторых компьютерах (Windows 10 с Chrome или Edge) всплывающее окно, запрашивающее у пользователя «Разрешить» или «Запретить» запрос местоположения, не отображается.Мы также выяснили, что если пользователь изменяет размеры или перемещает окно браузера, появляется всплывающее окно, и на него можно ответить.Однако, если всплывающее окно не отвечает, код остается в ожидании действий пользователя.Я хотел бы знать, есть ли способ просто продолжить выполнение кода, если пользователь не отвечает в определенное время.Это было бы как всплывающее окно.После истечения времени ожидания я могу просто предположить, что пользователь отклонил запрос местоположения.В любом случае мы должны заставить наш веб-сайт продолжать выполнение кода, даже если всплывающее окно никогда не отвечает.

getCurrentPosition(success callback, errorCallback, {timeout: 5000}) в этом случае не работает.Этот тайм-аут относится к случаю, когда пользователь разрешает геолокацию, но время ожидания процесса.

1 Ответ

0 голосов
/ 03 июля 2019

попробуйте

// this flag is to only call errorCallback if getCurrentPosition never calls the callback functions
var geolocationRequestCompleted = false;

getCurrentPosition(succesCallback, errorCallback, {timeout: 5000})

setTimeout(function () {
    if (!geolocationRequestCompleted) {
        errorCallback()
    }
}, 5001)

таким образом, через 5001 мс, если обратный вызов (успех или ошибка) не был вызван, вы вызовете errorCallback (), и приложение сможет продолжить работу. Флаг geolocationRequestCompleted должен быть установлен в true, если errorCallback или successCallback вызывается так, чтобы через 5001 мс тайм-аут не вызывал его во второй раз.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...