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