2016-10-26 2 views
4

Hier ist mein Javascript-Code:navigator.geolocation.getCurrentPosition/watchPosition funktioniert nicht in Android 6.0

function getLocation() { 
    //navigator.geolocation.getCurrentPosition(getCoor, errorCoor, {maximumAge:60000, timeout:30000, enableHighAccuracy:true}); 
    var mobile =jQuery.browser.mobile; 
    var deviceAgent = navigator.userAgent.toLowerCase(); 
    var agentID = deviceAgent.match(/(iphone|ipod|ipad)/); 
    if(mobile){ 
     watchLocation(function(coords) { 
     var latlon = coords.latitude + ',' + coords.longitude; 
     //some stuff 
     }, function() { 
     alert("error"); 
     }); 
    } else { 
     if (navigator.geolocation) { 
      navigator.geolocation.getCurrentPosition(showPosition); 
     } else { 
      alert("error"); 
     } 
    } 
} 

function watchLocation(successCallback, errorCallback) { 
    successCallback = successCallback || function(){}; 
    errorCallback = errorCallback || function(){}; 
    // Try HTML5-spec geolocation. 
    var geolocation = navigator.geolocation; 
    if (geolocation) { 
     // We have a real geolocation service. 
     try { 
      function handleSuccess(position) { 
      alert("position:"+position.coords); 
      successCallback(position.coords); 
      } 
      geolocation.watchPosition(handleSuccess, errorCallback, { 
      enableHighAccuracy: true, 
      maximumAge: 5000 // 5 sec. 
      }); 
     } catch (err) { 
      errorCallback(); 
     } 
    } else { 
     errorCallback(); 
    } 
} 

ich beide getCurrentPosition und watchPosition versucht haben.

Es erreicht errorCalback() Methode, wenn die Steuerung geolocation.watchPosition Zeile erreicht.

Ich teste in Motorola G 2nd Gen mit Android 6 und Google chrome browser und opera mini.

Update 1: Wenn ich eine Warnung irrtümlich Callback-Funktion habe ich error:1; message:Only Secure origins are allowed(see:link).

navigator.geolocation.getCurrentPosition(showPosition, function(e) 
    { alert(e); //alerts error:1; message:Only Secure origins are allowed(see: ) 
     console.error(e); 
    }) 

Update 2: Mit Hilfe von g4s8 ich in der Lage bin findout, dass der Fehler aufgrund der unsicheren URL ist. d. h. nur Zugriff mit http anstelle von https. Aber dann habe ich auch das im Browser umgangen, indem ich auf die erweiterte Schaltfläche geklickt habe. Aber es wird zur Eingabe aufgefordert , die ich nicht möchte..ist es eine Möglichkeit, Zugriff auf den Speicherort ohne Aufforderung?

+1

Haben Sie versucht, der Methode 'getCurrentPosition' den zweiten Parameter (Fehlerrückruf) hinzuzufügen? 'navigator.geolocation.getCurrentPosition (showPosition, Funktion (e) {console.error (e);})' – g4s8

+0

ja ... Sie können die zweite Zeile sehen, die kommentiert ist ... 'errorCoor' ist diese Callback-Funktion .. –

+0

Können Sie einen Fehler auf der Konsole ausgeben und eine Fehlermeldung zu dieser Frage hinzufügen? Es kann nützliche Informationen enthalten. z.B. 'PositionError {code: 1, message:" Benutzer verweigert Geolocation "}' – g4s8

Antwort

5

Ihre Seite sollte über https bedient werden, um auf die Geolocation-API zugreifen zu können.

Siehe Geolocation API Removed from Unsecured Origins

Starting with Chrome 50, Chrome no longer supports obtaining the user's location using the HTML5 Geolocation API from pages delivered by non-secure connections

...

It is an important issue as it will directly impact any site that requires use of the geolocation API and is not served over https

diese Ihre Seite über https zu beheben dienen oder auf localhost.


Thank you...Is there any way to bypass it??

Sie können versuchen, einige Geolocation-Dienste zu verwenden, z.B. geoip2 , Geolocation request


how to use them? can you show an example?? from those two can i access user location without knowing them?

GeoIP2 erkennen Sie Standort von IP-Adresse. Sie können Land (geoip2.country()) und Stadt (geoip2.city) mit js lib erhalten: Sie können eine vollständige Dokumentation

<script src="//js.maxmind.com/js/apis/geoip2/v2.1/geoip2.js" type="text/javascript"></script> 

Hier https://dev.maxmind.com/geoip/geoip2/javascript/ finden.

Google Maps Geolocation ist Google-Dienst, so müssen Sie zunächst get api key. Dann können Sie POST-Anfrage mit json Parameter https://www.googleapis.com/geolocation/v1/geolocate?key=API_KEY und erhalten die Antwort senden:

{ 
    "location": { 
    "lat": 51.0, 
    "lng": -0.1 
    }, 
    "accuracy": 1200.4 
} 

wo die Lage des geschätzten Breiten- und Längengrad des Benutzers ist, in Grad, und Genauigkeit ist die Genauigkeit des geschätzten Standortes in Metern.

Voll json Parameter defenition Sie hier in "Request Körper" Abschnitt finden https://developers.google.com/maps/documentation/geolocation/intro#overview

Sie können auch nützlich, diese Antworten finden: getCurrentPosition() and watchPosition() are deprecated on insecure origins


using IP it provides only country and city..??

Ja, nur dieses. Kein

will it provide physical location like how getCurrent Position provides??

, man kann nicht physischen Standort bekommen, weil es nur über gelocation API zugegriffen werden kann, dass in unsicheren Kontext beschränkt.

Auch Sie haben eine weitere Option. Sie können nur eine Seite (die auf die Geolocation-API zugreifen) auf dem https-Server hosten und von dieser Seite auf Ihre http-Site mit dem Benutzerstandort in den get-Parametern umleiten.

/* https page */ 
navigator.geolocation.getCurrentPosition(function (result) { 
    window.location.href = "http://your.site.com/http-page?lat=" + result.latitude + "&long=" + result.longitude; 
}); 
+0

Danke ... Gibt es eine Möglichkeit, es zu umgehen? –

+0

wie man sie benutzt? kannst du ein beispiel zeigen ?? Von diesen beiden kann ich auf den Benutzer zugreifen, ohne sie zu kennen? –

+0

g4s8 mit IP bietet es nur Land und Stadt .. ?? wird es einen physischen Standort geben, wie getCurrent Position? –

Verwandte Themen