2012-02-09 16 views
14

Ok, więc buduję aplikację korzystającą z interfejsu API geolokacji. I cant wydają się bardzo prosty kawałek kodu do pracy w Firefox 10. Oto kod:navigator.geolocation.getCurrentPosition Oddzwonienia nie będą działać w przeglądarce Firefox 10

window.onload = function() { 
     if (navigator.geolocation) { 
      navigator.geolocation.getCurrentPosition(function(position) { 
       alert('it works'); 
      }, function(error) { 
       alert('Error occurred. Error code: ' + error.code);   
      }); 
     }else{ 
      alert('no geolocation support'); 
     } 
    }; 

Tak więc, na przykład, w chromie, po uruchomieniu strony będę zapytał, czy chcę dzielić moja lokalizacja, a po kliknięciu "tak" ostrzeże mnie "działa". Teraz w Firefoksie 10 poprosi mnie o udostępnienie mojej lokalizacji i po kliknięciu akcji nic nie robi ... Próbowałem uzyskać wywołanie zwrotne, aby uruchomić dowolny typ kodu, ale bez powodzenia. Czy to błąd w Firefoksie, czy robię coś nie tak? Mam przykład kodu tutaj do testowania: http://dev-hub.com/geolocation.html.

Edit --- Moja jest system operacyjny Windows 7 64bit

+0

na jakim sprzęcie używasz firefox? –

+0

W systemie Windows 7 64 – Zaptree

+0

Funkcja Geolokalizacja wymaga urządzenia przenośnego obsługującego geolokalizację. [Możesz dowiedzieć się więcej tutaj.] (Http://stackoverflow.com/questions/1349064/which-devices-support-javascript-geolocation-via-navigator-geolocation) –

Odpowiedz

18

porządku Okazało się, że problem jest rzeczywiście Firefox i że nie działa niezawodnie lub jednakowo na wszystkich platformach. Patrząc na http://dev.w3.org/geo/api/spec-source.html znalazłem następującą opcję, aby dodać:

window.onload = function() { 
     if (navigator.geolocation) { 
      navigator.geolocation.getCurrentPosition(function(position) { 
       alert('it works'); 
      }, function(error) { 
       alert('Error occurred. Error code: ' + error.code);   
      },{timeout:5000}); 
     }else{ 
      alert('no geolocation support'); 
     } 
    }; 

Jak widać tutaj timeout: 5000 została dodana, co oznacza, że ​​jeśli z jakiegoś powodu przeglądarka zajmuje więcej niż 5000ms (5 sekund), a następnie rzucać błąd przekroczenia limitu czasu (kod błędu 3). Tak więc teraz, gdy Firefox nie działa, przynajmniej uruchamia wywołanie błędu i pojawia się komunikat o błędzie "Wystąpił błąd. Kod błędu: 3".

Najwyraźniej domyślna wartość limitu czasu jest nieskończona, więc nigdy nie wychodzi ... Chrome jest w 100% niezawodny, ale Firefox jest w 10% niezawodny na moim komputerze, co jest bardzo rozczarowujące. Na moim drugim komputerze, na którym działa Windows XP i jest w tej samej sieci, Firefox wydaje się być w 100% niezawodny.

+7

50000 ms = 50 sek ... więc może powinien użyć 5000 ms (3 zera) –

0

Zrobiłem to dla was przykładem:

if(!navigator.geolocation){ 
alert('El Navegador no soporta GeoLocalización'); 
} 

function doGeo(position) 
{ 
    var coords = position.coords.latitude + '+' + position.coords.longitude; 
    var url = 'https://maps.google.es/?q=' + coords; 
    $("#lat").html("Latitud: " + position.coords.latitude); 
    $("#lon").html("Longitud: " + position.coords.longitude); 
    $("#acc").html("Precisión: " + position.coords.accuracy); 
    $("#alt").html("Altitud: " + position.coords.speed);   
    var link = '<a class="btn btn-primary" href="' + url + '" target="_blank">Ir a la  Ubicación en Google Maps</a>'; 
    $(link).appendTo('#GoogleMaps'); 
} 

function lost() 
{ 
    alert('Algo salió mal, Intentelo más tarde...'); 
}; 
navigator.geolocation.watchPosition(doGeo, lost, {maximumAge:0,enableHighAccuracy:true}   ); 

http://jsfiddle.net/aA2zv/35/

nadzieję, że to pomaga!

+0

Altitud == Prędkość? –

+0

Otrzymałem wiadomość od utraconej funkcji :( –

Powiązane problemy