it-swarm.com.de

Geolocation Ohne SSL-Verbindung

Ich entwickle eine Anwendung, die Geolocation-Koordinaten verwendet . Ich habe die Geolocation-Funktion von HTML5 verwendet, um den Standort des Websitebesuchers herauszufinden, aber das Problem liegt bei Chrome, das GeoLocation aus unsicheren Quellen nicht unterstützt.

  function showPosition(){
    if(navigator.geolocation){
        navigator.geolocation.getCurrentPosition(function(position){
            var positionInfo = "Your current position is (" + "Latitude: " + position.coords.latitude + ", " + "Longitude: " + position.coords.longitude + ")";
            document.getElementById("result").innerHTML = positionInfo;
        });
    } else{
        alert("Sorry, your browser does not support HTML5 geolocation.");
    }
}

Hier ist der Code, in dem getCurrentPosition nicht funktioniert, da meine Site nicht mit SSL verbunden ist.

Warnung bei Chrome: getCurrentPosition () und watchPosition () funktionieren nicht mehr bei unsicheren Ursprüngen. Um diese Funktion zu verwenden, sollten Sie in Betracht ziehen, Ihre Anwendung auf ein sicheres Origin wie HTTPS umzustellen.

Gibt es eine andere Möglichkeit, Koordinaten/LatLong-Werte auf Chrom zu erhalten? [nur bei unsicherer Verbindung]

EDIT: Es funktioniert auf meinem Rechner mit localhost: 80, aber nicht in der Test-URL, die sich auf http befindet

11
Niranth Reddy
var apiGeolocationSuccess = function(position) {
    alert("API geolocation success!\n\nlat = " + position.coords.latitude + "\nlng = " + position.coords.longitude);
};

var tryAPIGeolocation = function() {
    jQuery.post( "https://www.googleapis.com/geolocation/v1/geolocate?key=AIzaSyDCa1LUe1vOczX1hO_iGYgyo8p_jYuGOPU", function(success) {
        apiGeolocationSuccess({coords: {latitude: success.location.lat, longitude: success.location.lng}});
  })
  .fail(function(err) {
    alert("API Geolocation error! \n\n"+err);
  });
};

var browserGeolocationSuccess = function(position) {
    alert("Browser geolocation success!\n\nlat = " + position.coords.latitude + "\nlng = " + position.coords.longitude);
};

var browserGeolocationFail = function(error) {
  switch (error.code) {
    case error.TIMEOUT:
      alert("Browser geolocation error !\n\nTimeout.");
      break;
    case error.PERMISSION_DENIED:
      if(error.message.indexOf("Only secure origins are allowed") == 0) {
        tryAPIGeolocation();
      }
      break;
    case error.POSITION_UNAVAILABLE:
      alert("Browser geolocation error !\n\nPosition unavailable.");
      break;
  }
};

var tryGeolocation = function() {
  if (navigator.geolocation) {
    navigator.geolocation.getCurrentPosition(
        browserGeolocationSuccess,
      browserGeolocationFail,
      {maximumAge: 50000, timeout: 20000, enableHighAccuracy: true});
  }
};

tryGeolocation();
18
Mannan Bahelim

Hier ist meine Nicht-SSL-Lösung für Safari in 2017/05

var apiGeolocationSuccess = function(position) {
    alert("API geolocation success!\n\nlat = " + position.coords.latitude + "\nlng = " + position.coords.longitude);
};

var tryAPIGeolocation = function() {
    jQuery.post( "https://www.googleapis.com/geolocation/v1/geolocate?key=AIzaSyDCa1LUe1vOczX1hO_iGYgyo8p_jYuGOPU", function(success) {
        apiGeolocationSuccess({coords: {latitude: success.location.lat, longitude: success.location.lng}});
    })
        .fail(function(err) {
            alert("API Geolocation error! \n\n"+err);
        });
};

var browserGeolocationSuccess = function(position) {
    alert("Browser geolocation success!\n\nlat = " + position.coords.latitude + "\nlng = " + position.coords.longitude);
};

var browserGeolocationFail = function(error) {
    switch (error.code) {
        case error.TIMEOUT:
            alert("Browser geolocation error !\n\nTimeout.");
            break;
        case error.PERMISSION_DENIED:
            if(error.message.indexOf("Only secure origins are allowed") == 0) {
                tryAPIGeolocation();
            }
            break;
        case error.POSITION_UNAVAILABLE:
            // dirty hack for safari
            if(error.message.indexOf("Origin does not have permission to use Geolocation service") == 0) {
                tryAPIGeolocation();
            } else {
                alert("Browser geolocation error !\n\nPosition unavailable.");
            }
            break;
    }
};

var tryGeolocation = function() {
    if (navigator.geolocation) {
        navigator.geolocation.getCurrentPosition(
            browserGeolocationSuccess,
            browserGeolocationFail,
            {maximumAge: 50000, timeout: 20000, enableHighAccuracy: true});
    }
};

tryGeolocation();

Der neue Teil ist dieser in "case error.POSITION_UNAVAILABLE":

case error.POSITION_UNAVAILABLE:
// dirty hack for safari
if(error.message.indexOf("Origin does not have permission to use Geolocation service") == 0) {
    tryAPIGeolocation();
} else {
    alert("Browser geolocation error !\n\nPosition unavailable.");
}
break;
4
Eckonator

Chrome verhindert jetzt, dass nicht vertrauenswürdige Sites die html5-Geolocation verwenden. Vertrauenswürdige Sites enthalten localhostor eine von https zertifizierte Domäne. In meinem Fall war keine der beiden Möglichkeiten möglich. Stattdessen öffnete ich Chrome mit diesem Argument von der Befehlszeile aus: open -a /Applications/Google\ Chrome.app' --args --unsafely-treat-insecure-Origin-as-secure="http://yoursite.test". Dies fügte meiner bestimmten Domäne eine vertrauenswürdige Site hinzu.

2
stackPusher

Für mich funktionierte dies auf Mac OSX mit Chrome Version 70.0.3538.67 (Official Build) (64-bit)

 open -a /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --args --user-data-dir=$HOME --unsafely-treat-insecure-Origin-as-secure=http://www.bpl.test  --allow-running-insecure-content --reduce-security-for-testing
0
user969068