3

ユーザーのブラウザーがユーザーの位置を特定できるようにする許可を要求している場合は、ページに情報を表示したいのですが、ブラウザーが既に認証されている場合は、この情報を表示したくありません。

これを行う良い方法はありますか?

詳細に。ユーザーテストでは、ユーザーがダイアログを表示せず、混乱することがわかっているため、「「これらの人にあなたの場所を取得することを許可する」というボックスをクリックしてください」というメッセージを表示したいと思います。

ただし、その結果、場所の検索ページを通過するときに許可を得ていても、ヘルプ メッセージが表示されます。彼らが私たちに許可を与えたという事実を保存しても役に立ちません。

何か案は?

乾杯マーク。

4

1 に答える 1

1

エラー コールバックを渡してgetCurrentPosition()、ユーザーがトラッキングを拒否したかどうかを判断することができます / 位置を特定できませんでした ( spec )。

さらに、一定時間後にメッセージを表示する TimeOut を設定します。この場合、ユーザーはブラウザー ダイアログを見落としている可能性が高いためです。

サンプルコード:

function getLocation(){
  if (navigator.geolocation) {
     navigator.geolocation.getCurrentPosition(showPosition,showError);
     // set a Timeout, after which the user gets prompted
     // ugly global var but you could prevent this e.g. with a closure
     t = window.setTimeout(
              function(){alert("Please allow us to locate you;) !")},3000
         );
  } else {
     alert("Geolocation is not supported by this browser.");
  }
}
function showPosition(position){
      alert("Latitude: " + position.coords.latitude + " - Longitude: " + position.coords.longitude);
      // position could be determined, clear the timeout
      window.clearTimeout(t);   
}
function showError(error){
  // an error occured, clear the timeout as well
  window.clearTimeout(t);
  switch(error.code) {
    case error.PERMISSION_DENIED:
      alert("User denied the request.");
      // Do stuff here, etc. ask the user to please allow the request
      break;
    case error.POSITION_UNAVAILABLE:
      alert("No Location information available.");
      break;
    case error.TIMEOUT:
      // user probably didn't recognize the browser dialog
      alert("The request timed out.");
      break;
    case error.UNKNOWN_ERROR:
      alert("An unknown error occurred.");
      break;
    }
}

ただし、許可を保存して確認することはできます。彼らが許可を取り消した場合、それに応じてアクションを実行できるエラーコールバックが発生します。

于 2012-09-17T15:19:44.907 に答える