navigator.geolocation.getCurrentPosition всегда терпит неудачу в chrome и firefox - PullRequest
11 голосов
/ 16 марта 2012

У меня странное поведение, когда я пытался проверить свою веб-страницу "navigator.geolocation.getCurrentPosition".Вот мой результат тестирования и код:

мой код:

function detectLocation() 
{
  if (navigator.geolocation) 
  {
    navigator.geolocation.getCurrentPosition(geocodePosition, onError, { timeout: 30000 });
    navigator.geolocation.watchPosition(watchGeocodePosition);
  } 
  else 
  {
    onError();
  }
}

эта функция была запущена при вызове события "body" onload.Я пытался изменить время ожидания на 10000 и 20000, но все равно получил тот же результат.Я также позволил crome и firefox получить мое местоположение.

result:

  1. Используя chrome (v 17.0.963.79 m), результат всегда переходил в функцию onError, когда navigator.geolocation.getCurrentPositionбыл вызван.
  2. Используя Firefox (v 10.0.2), результат всегда передавался в функцию onError при вызове navigator.geolocation.getCurrentPosition.
  3. Используя IE (v 9), результат был фантастическим, я получил свое текущее местоположение.

Может кто-нибудь помочь мне в этой странной ситуации?У меня действительно не было никакой идеи, чтобы решить эту проблему, и я торопился с крайним сроком моего проекта.Спасибо, прежде чем.

РЕДАКТИРОВАТЬ: За эти пару дней я получил некоторый прогресс, код ошибки равен 2 с сообщением "Поставщик сетевого расположения на https://maps.googleapis.com/maps/api/browserlocation/json?browser=chromium&sensor=true': Ответ был искажен" .Все еще не решен, кто-нибудь знает, как решить эту проблему?

Ответы [ 7 ]

16 голосов
/ 31 марта 2012

Я смоделировал эту проблему и обнаружил, что функции обратного вызова успешно вызывались только тогда, когда html-страница размещалась на веб-сервере, а не при открытии из файловой системы.

Чтобы проверить, я открыл файл прямо со своего диска C:, но обратные вызовы не работали, а затем разместил файл в службах IIS, и обратные вызовы сработали.

<html>
<body onload="detectLocation()">
<!-- This html must be hosted on a server for navigator.geolocation callbacks to work -->

<div id="status"></div>

<script type="text/javascript">
function detectLocation()
{
  log("detectLocation() starting");
  if (navigator.geolocation)
  {
    log("navigator.geolocation is supported");
    navigator.geolocation.getCurrentPosition(geocodePosition, onError, { timeout: 30000 });
    navigator.geolocation.watchPosition(watchGeocodePosition);
  }
  else
  {
    log("navigator.geolocation not supported");
  }
}
function geocodePosition(){
    log("geocodePosition() starting");
}

function watchGeocodePosition(){
    log("watchGeocodePosition() starting");
}

function onError(error){
    log("error " + error.code);
}
function log(msg){
    document.getElementById("status").innerHTML = new Date() + " :: " + msg + "<br/>" + document.getElementById("status").innerHTML;
}
</script>
</body>
</html>
12 голосов
/ 11 декабря 2012

Я также получил это сообщение:

сообщение: «Провайдер сетевого расположения на https://www.googleapis.com/': возвращен код ошибки 404.», код: 2

Я мог бы решить эту проблему, включив Wi-Fi-адаптер

8 голосов
/ 20 марта 2014

У меня была такая же проблема. Браузер Chrome не вернул позицию на тайм-ауте 30000 миллисекунд. Firefox тоже не возвращал позицию. Я добавил опцию enableHighAccuracy и установил для него значение false, но ничего не изменилось (false - это опция по умолчанию). Когда я изменяю его на true, геолокация начинает работать!
Это мой окончательный код,

if (navigator.geolocation) {
    navigator.geolocation.getCurrentPosition(
            function(position) {
                // Get current cordinates.
                positionCords = {"lat": position.coords.latitude, "lng": position.coords.longitude};
            },
            function(error) {
                // On error code..
            },
            {timeout: 30000, enableHighAccuracy: true, maximumAge: 75000}
    );
}  
1 голос
/ 20 октября 2017

Вы должны использовать https, а не http.

Ссылка Chrome для этого здесь - https://developers.google.com/web/updates/2016/04/geolocation-on-secure-contexts-only

0 голосов
/ 13 апреля 2017

У меня была та же проблема, и решением было увеличить время ожидания, так как мобильная сеть медленнее, чем проводная сеть

 {timeout: 30000, enableHighAccuracy: true, maximumAge: 75000}

вместе с включением сотового позиционирования

в настройках устройствавключите опцию «Wi-Fi и сотовая связь».

0 голосов
/ 01 марта 2016

Я знаю, что это старая тема, но недавно у меня также была эта ошибка:

message: "Network location provider at 'https://www.googleapis.com/' : Returned error code 404.", code: 2

Исправление: получить ключ API для карт Google и использовать его в коде

<script src='https://maps.googleapis.com/maps/api/jscallback=initMap &signed_in=true&key=YOUR-API-KEY' async defer></script>

Здесь вы можете получить API-ключ: https://developers.google.com/maps/documentation/javascript/get-api-key#key

0 голосов
/ 25 февраля 2015

Это напечатает широту и долготу вашего местоположения

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
  <script>
    function getLocation() {
        if (navigator.geolocation) {
            navigator.geolocation.getCurrentPosition(showPosition);
        } else { 
            alert("Geolocation is not supported by this browser.");
        }

    }
    function showPosition(position) {
        document.getElementById('idLatitude').value = position.coords.latitude;
        document.getElementById('idLongitude').value = position.coords.longitude;

    }
    </script>

</head>
<body onload="getLocation()">
<form action="HelloWorld" method="post">
    <input id="idLatitude"  type="text" name="strLatitude">
    <input id="idLongitude" type="text" name="strLongitude">

</form>
</body>
</html>

enter image description here

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