it-swarm.com.de

navigator.geolocation.getCurrentPosition schlägt in Chrome und Firefox immer fehl

Ich hatte ein merkwürdiges Verhalten, als ich versuchte, meine "Navigator.geolocation.getCurrentPosition" - Webseite zu testen. Hier ist mein Testergebnis und Code.

mein code:

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

diese Funktion wurde ausgeführt, als das Onload-Ereignis "body" aufgerufen wurde. Ich hatte versucht, das Timeout auf 10000 und 20000 zu ändern, aber ich erhielt immer noch dasselbe Ergebnis. Ich habe auch Crome und Firefox zugelassen, um meinen Standort zu ermitteln.

ergebnis:

  1. Bei Verwendung von chrome (v 17.0.963.79 m) wurde das Ergebnis beim Aufruf von navigator.geolocation.getCurrentPosition immer an die Funktion onError Weitergegeben.
  2. Bei Verwendung von Firefox (Version 10.0.2) wurde das Ergebnis immer an die onError-Funktion Übergeben, wenn navigator.geolocation.getCurrentPosition aufgerufen wurde. 
  3. Bei Verwendung von IE (v 9) war das Ergebnis fantastisch. Ich habe meinen aktuellen Standort erhalten.

kann mir jemand in dieser seltsamen Situation helfen? Ich hatte wirklich keine Idee, dieses Problem zu lösen, und ich hatte es eilig, den Projekttermin einzuhalten. Danke schon mal. 

EDIT: In diesen paar Tagen habe ich einige Fortschritte erzielt. Der Fehlercode ist 2 mit der Nachricht "Anbieter für Netzwerkstandorte unter 'https://maps.googleapis.com/maps/ api/browserlocation/json? browser = chrom & sensor = true ': Antwort wurde fehlerhaft ". Noch ungelöst, weiß jemand, wie man das löst?

11
John Hexis

Ich simulierte dieses Problem und stellte fest, dass die Erfolgsrückruffunktionen nur aufgerufen wurden, wenn die HTML-Seite auf einem Webserver gehostet wurde und nicht, wenn sie von einem Dateisystem aus geöffnet wurden. 

Zum Testen habe ich die Datei direkt von meinem Laufwerk C: geöffnet, und die Rückrufe funktionierten nicht. Anschließend wurde die Datei auf Internet Information Services (IIS) gehostet, und die Rückrufe funktionierten.

<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

Ich habe auch diese Nachricht erhalten:

nachricht: "Anbieter von Netzwerkadressen unter" https://www.googleapis.com/ ": Zurückgegebener Fehlercode 404.", Code: 2

Ich könnte es lösen, indem ich meinen WLAN-Adapter einschalte

12
lukassteiner

Ich hatte das gleiche Problem. Der Chrome-Browser hat keine Position bei einem Zeitlimit von 30000 Millisekunden zurückgegeben. Firefox gab auch keine Position zurück. Ich habe die Option enableHighAccuracy hinzugefügt und auf false gesetzt, aber nichts wurde geändert (false ist die Standardoption). Wenn ich es auf true ändere, begann die Geolocation zu arbeiten!
Dies ist mein endgültiger Code, 

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

Ich weiß, das ist ein altes Thema, aber kürzlich hatte ich auch diesen Fehler:

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

Die Lösung besteht darin, einen API-Schlüssel für Google Maps zu erhalten und ihn in Ihrem Code zu verwenden

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

Hier erhalten Sie API KEY: https://developers.google.com/maps/documentation/javascript/get-api-key#key

0
Combine

Sie müssen https verwenden, nicht http

0
Chris Halcrow

Ich hatte das gleiche Problem, und die Lösung bestand darin, die Zeitüberschreitungsdauer zu erhöhen, da das Mobilfunknetz langsamer ist als das Festnetz 

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

zusammen mit der Aktivierung der zellulären Positionierung

Aktivieren Sie in den Geräteeinstellungen die Option "WLAN- und Mobilfunkpositionierung".

0
Hitesh Sahu