7

位置情報の共有を拒否した後、何らかのトリガーでユーザーに地理位置情報を再度求める方法はありますか?

navigator.geolocation.getCurrentPosition 

一度起動すると、連続して呼び出しても同じ結果にはなりません。どこにも答えが見つからない/

4

3 に答える 3

0

このコード スニペットとこの 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

于 2013-06-21T10:17:44.577 に答える
0

Geolocation API では? いいえ。

ユーザーがアクセス許可の拒否をクリックすると、単に「いいえ、二度と気にしないでください...」という意味になります。

ただし、ユーザーは 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);
于 2014-11-24T18:10:58.557 に答える
0

これに最適なオプションは、地理位置情報サブドメインをセットアップし、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

これにより、すべてのブラウザーで無制限に試行できるようになります。必要なのは、独自の再試行ロジックでプログラムすることだけです。

于 2018-06-25T08:02:53.597 に答える