web-dev-qa-db-fra.com

navigator.geolocation.getCurrentPosition échoue toujours en chrome et firefox

J'ai eu un comportement étrange lorsque j'ai essayé de tester ma page Web "Navigator.geolocation.getCurrentPosition". Voici mon résultat de test et le code :

mon code:

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

cette fonction a été exécutée lorsque l'événement "body" onload a été appelé. J'avais essayé de changer le timeout à 10000 et 20000, mais j'ai toujours le même résultat. J'ai également autorisé crome et firefox à se localiser.

résultat:

  1. À l’aide de chrome (v 17.0.963.79 m), le résultat est toujours passé à la fonction onError Lors de l’appel de navigator.geolocation.getCurrentPosition.
  2. Avec Firefox (v 10.0.2), le résultat est toujours allé à la fonction onError Lorsque navigator.geolocation.getCurrentPosition a été appelé. 
  3. En utilisant IE (v 9), le résultat a été fantastique. J'ai obtenu mon emplacement actuel.

quelqu'un peut-il m'aider dans cette situation étrange? Je n'avais vraiment aucune idée pour résoudre ce problème et j'étais pressé par la date limite de mon projet. Merci avant. 

EDIT: Depuis quelques jours, le code de code d'erreur est 2 avec un message "fournisseur d'emplacement réseau à l'adresse" https://maps.googleapis.com/maps/ api/browserlocation/json? browser = chromium & sensor = true ': la réponse a été mal formée ". Toujours pas résolu, est-ce que quelqu'un sait comment résoudre ceci?

11
John Hexis

J'ai simulé ce problème et constaté que les fonctions de rappel de réussite n'étaient appelées que lorsque la page html était hébergée sur un serveur Web et non lorsqu'elle était ouverte à partir d'un système de fichiers. 

Pour tester, j'ai ouvert le fichier directement à partir de mon lecteur C: et les rappels n'ont pas fonctionné, puis hébergé le fichier sur Internet Information Services (IIS) et les rappels ont fonctionné.

<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>
16
ajayel

J'ai aussi reçu ce message:

message: "Fournisseur d'emplacement réseau à 'https://www.googleapis.com/': Code d'erreur renvoyé 404.", code: 2

Je pourrais le résoudre en allumant mon adaptateur wifi

12
lukassteiner

J'ai eu le même problème. Le navigateur Chrome ne renvoie pas de position sur le délai d'expiration de 30000 millisecondes. Firefox ne renvoyait pas de position aussi. J'ai ajouté l'option enableHighAccuracy et l'ai définie sur false mais rien n'a changé (false est l'option par défaut). Quand je le change en vrai, la géolocalisation a commencé à fonctionner!
Ceci est mon code final, 

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

Je sais que c'est un sujet ancien, mais récemment j'ai eu cette erreur aussi:

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

La solution consiste à obtenir la clé API pour Google Maps et à l'utiliser dans votre code.

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

Ici vous pouvez obtenir la clé API: https://developers.google.com/maps/documentation/javascript/get-api-key#key

0
Combine

Vous devez utiliser https, pas http

0
Chris Halcrow

J'ai eu le même problème et la solution était d'augmenter la durée de temporisation car le réseau mobile est plus lent que le réseau câblé 

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

avec permettant le positionnement cellulaire

Dans les paramètres du périphérique, activez l'option "Positionnement Wifi et cellulaire".

0
Hitesh Sahu