2012-02-09 11 views
14

Ok quindi sto costruendo un'app che utilizza l'API di geolocalizzazione. I cant sembrano ottenere un semplice pezzo di codice per lavorare su Firefox 10. Ecco il codice:navigator.geolocation.getCurrentPosition I callback non funzionano su 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'); 
     } 
    }; 

Così, per esempio, in cromo, dopo l'esecuzione della pagina mi verrà chiesto se voglio condividere la mia posizione, e dopo aver cliccato sì mi avviserà con "funziona". Ora in Firefox 10 mi chiederà di condividere la mia posizione e dopo aver fatto clic su condividi non fa nulla ... Ho cercato di ottenere il callback per eseguire qualsiasi tipo di codice ma senza fortuna. È un bug con Firefox o sto facendo qualcosa di sbagliato? Ho qui un esempio del codice per il test: http://dev-hub.com/geolocation.html.

Modifica --- Il mio sistema operativo è Windows 7 a 64 bit

+0

su quale hardware è in esecuzione Firefox? –

+0

Su windows 7 64 – Zaptree

+0

La funzione di geolocalizzazione richiede un dispositivo mobile che supporti la geolocalizzazione. [Puoi saperne di più qui.] (Http://stackoverflow.com/questions/1349064/which-devices-support-javascript-geolocation-via-navigator-geolocation) –

risposta

18

Va bene ho scoperto che il problema è davvero Firefox e che non funziona in modo affidabile o allo stesso modo su tutte le piattaforme. Guardando http://dev.w3.org/geo/api/spec-source.html ho trovato la seguente opzione per aggiungere:

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'); 
     } 
    }; 

Come si può vedere qui il timeout: 5000 è stato aggiunto il che significa che se per qualche motivo il browser prende più di 5000ms (5 secondi) poi gettare un errore di timeout (questo è il codice di errore 3). Così ora ogni volta che Firefox non funziona, esegue almeno la richiamata di errore e ricevo un messaggio di avviso "Errore verificato. Codice errore: 3".

Apparentemente il valore predefinito di timeout è infinito quindi non va mai scaduto ... Chrome è affidabile al 100% ma Firefox è circa il 10% affidabile sulla mia macchina che è molto deludente. Sul mio altro computer che esegue Windows XP e si trova sulla stessa rete, Firefox sembra affidabile al 100%.

+7

50000 ms = 50 sec ... quindi forse dovrebbe usare 5000 ms (3 zeri) –

0

Ho fatto questo esempio per voi:

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/

Speranza che aiuta!

+0

Altitudine == Velocità? –

+0

Ho ricevuto il messaggio dalla funzione persa :( –

Problemi correlati