web-dev-qa-db-ja.com

SSL接続なしのジオロケーション

地理位置座標を使用するアプリケーションを開発しています。 HTML5ジオロケーション機能を使用してサイト訪問者の位置を特定しましたが、問題はChromeであり、安全でないオリジンでGeoLocationをサポートしていません。

  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.");
    }
}

私のサイトはSSL接続されていないので、コードgetCurrentPositionは機能していません。

Chrome:による警告)getCurrentPosition()およびwatchPosition()は安全でないオリジンで動作しなくなりました。この機能を使用するには、アプリケーションを安全なオリジンに切り替えることを検討してください。 HTTPSなど。

chrome?[安全でない接続のみ]で座標/ LatLong値を取得する他の方法はありますか

[〜#〜] edit [〜#〜]:localhost:80を使用してマシンで動作していますが、http上にあるテストURLでは動作していません

14
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();
19
Mannan Bahelim

これは2017/05のSafari用の非SSLソリューションです

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();

新しい部分は、「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;
5
Eckonator

Chromeは、信頼されていないサイトがhtml5ジオロケーションを使用することを防ぎます。信頼済みサイトには、localhostまたはhttps認定ドメインが含まれます。私の場合、これらのどちらも不可能だったので、代わりにこの引数でコマンドラインからchromeを開きました:open -a /Applications/Google\ Chrome.app' --args --unsafely-treat-insecure-Origin-as-secure="http://yoursite.test"特定のドメインを信頼済みサイトとして追加しました。

4
stackPusher

私にとっては、これはChrome Version 70.0.3538.67 (Official Build) (64-bit)を使用してMac OSXで機能しました。

 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