Тайм-аут от navigator.geolocation.getCurrentPosition не вызывает обратного вызова с ошибкой

#javascript #geolocation

#javascript #геолокация

Вопрос:

У меня есть следующий код Javascript для получения локализации пользователя:

 navigator.geolocation.getCurrentPosition(getStores, getStoresError, {
    'enableHighAccuracy' : true,
    'timeout' : 10000,
    'maximumAge' : 0
});
  

Оба обратных вызова вызываются, когда пользователь принимает или отклоняет запрос на локализацию. Но если через 10 секунд не будет предоставлен ответ, я ожидал, что тайм-аут истечет и будет вызван getStoresError. Этого не происходит. Есть идеи?

Ответ №1:

Таймер тайм-аута не начинает обратный отсчет до тех пор, пока пользователь не даст разрешение даже попытаться вычислить свое местоположение

  var options = {timeout:10000,enableHighAccuracy:true,maximumAge:0};

 navigator.geolocation.getCurrentPosition(getStores,getStoresError,options);
  

Комментарии:

1. У меня все еще тот же результат, что и ожидалось. Я был бы очень удивлен, если бы это был ответ

2. Параметр тайм-аута описан здесь: developer.mozilla.org/en-US/docs/Web/API/PositionOptions Начнется обратный отсчет, как только пользователь предоставит разрешение.

3. ОК. Теперь я понял. Я думал, что тайм-аут — это период времени, указанный с момента запроса до получения ответа от пользователя. Спасибо за вашу помощь.

Ответ №2:

Попробуйте создать глобальную переменную, которая обновляется только при успешном методе для navigator.geolocation.getCurrentPosition. Затем вы можете создать функцию setTimeout продолжительностью 10 секунд, которая проверяет, было ли обновлено это значение или нет.

Единственная проблема с этим заключается в том, что если пользователь нажимает на Разрешить и ваш тайм-аут истекает непосредственно перед получением местоположения, вы можете обрабатывать ответ преждевременно.

Ответ №3:

После многих попыток в среде разработки. Я наконец обнаружил, что с 2016 chrome отключил этот api в незащищенной среде, это должно быть сделано с https, надеюсь, это сэкономит время людей. Смотрите эту ссылку ниже, https://developers.google.com/web/updates/2016/04/geolocation-on-secure-contexts-only .