位置情報の共有を拒否した後、何らかのトリガーでユーザーに地理位置情報を再度求める方法はありますか?
navigator.geolocation.getCurrentPosition
一度起動すると、連続して呼び出しても同じ結果にはなりません。どこにも答えが見つからない/
位置情報の共有を拒否した後、何らかのトリガーでユーザーに地理位置情報を再度求める方法はありますか?
navigator.geolocation.getCurrentPosition
一度起動すると、連続して呼び出しても同じ結果にはなりません。どこにも答えが見つからない/
このコード スニペットとこの SO Answer: What is the best JQuery plugin that handles HTML5 location? をご覧ください。
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(successFunction, errorFunction);
}else{
errorFunction();
}
function successFunction(position) { //uses HTML5 if available
var lat = position.coords.latitude;
var lng = position.coords.longitude;
}
function errorFunction(){ //uses IP if no HTML5
$.getJSON("http://freegeoip.net/json/", function(res){
var lat = res.latitude;
var lng = res.longitude;
});
}
このFiddle
リンクも
見てくださいJQuery Geolocator Plugin
ユーザーがアクセス許可の拒否をクリックすると、単に「いいえ、二度と気にしないでください...」という意味になります。
ただし、ユーザーは Location-share-settings を削除することでそれを実行できますが、もちろんプロンプトが再び表示されます。
または、ブラウザで許可されている場合、ユーザーは設定を変更できますが、たとえば、Chrome はこれらの設定を例外として管理するため (ユーザーが許可したか拒否したかに関係なく)、ユーザーは設定を削除する必要があります。とにかく例外。
唯一のオプションは、エラーをキャッチし、外部 API などを使用して IP でユーザーの場所を見つけることです。自分でプログラムすることも、@Venkat が提案した既存のソリューションももちろんあります。
しかし、IP ジオロケーションは扱いにくいものであることに注意してください。アドレス番号の正確さがある場合もあれば、単なる状態の正確さである場合もあります。
Mozilla のドキュメントからのこの例は、Geolocation エラーを処理する良い例を示しています。
var options = {
enableHighAccuracy: true,
timeout: 5000,
maximumAge: 0
};
function success(pos) {
var crd = pos.coords;
console.log('Your current position is:');
console.log('Latitude : ' + crd.latitude);
console.log('Longitude: ' + crd.longitude);
console.log('More or less ' + crd.accuracy + ' meters.');
};
function error(err) {
/*
CALL EXTERNAL API HERE
*/
console.warn('ERROR(' + err.code + '): ' + err.message);
};
navigator.geolocation.getCurrentPosition(success, error, options);
これに最適なオプションは、地理位置情報サブドメインをセットアップし、iframe にロードすることです。
geo-0.domain.com
geo-1.domain.com
geo-2.domain.com
geo-3.domain.com
geo-4.domain.com
geo-N.domain.com
これにより、すべてのブラウザーで無制限に試行できるようになります。必要なのは、独自の再試行ロジックでプログラムすることだけです。