17

クライアントがページにインストールする小さなスクリプトを作成しています。位置情報は必須ではありませんが、存在する場合はあると便利です。クライアント ページが地理位置情報を要求したかどうか、およびユーザーが別のプロンプトを作成せずに緯度と経度の取得を許可するかどうかを確認する方法はありますか?

4

5 に答える 5

29

geolocation API では不可能ですが、新しい許可 API では可能です

このコードは、座標を取得したいが、座標はそれほど重要ではなく、geoIP にフォールバックする可能性があるため、プロンプト ダイアログでユーザーを煩わせたくない場合に役立ちます。

function getCoords() {
  return new Promise((resolve, reject) =>
    navigator.permissions ?

      // Permission API is implemented
      navigator.permissions.query({
        name: 'geolocation'
      }).then(permission =>
        // is geolocation granted?
        permission.state === "granted"
          ? navigator.geolocation.getCurrentPosition(pos => resolve(pos.coords)) 
          : resolve(null)
      ) :

    // Permission API was not implemented
    reject(new Error("Permission API is not supported"))
  )
}

getCoords().then(coords => console.log(coords))

これは、許可が与えられていない場合は null に解決され、一部の JavaScript コードがブラウザーでサポートされていない場合はエラーがキャストされ、許可されている場合は座標に解決されます。

于 2016-02-25T13:22:13.567 に答える
7

ウィンドウ オブジェクトを調べることで、機能が存在するかどうかを検出できます。

if ('geolocation' in navigator) {
     navigator.geolocation.getCurrentPosition(...);
}

これにより、単一のユーザー プロンプトが表示され、ページと位置情報を共有するかどうかをユーザーに尋ねます。

ブラウザで地理位置情報が利用できない場合、これはまったく実行されません。


**編集** 地理位置情報へのアクセスを許可するために、この *ページ読み込み* でユーザーに既にプロンプ​​トを表示している場合は、再度プロンプトを表示することはありません。ユーザーが移動してこのページに戻ると、再度プロンプトが表示されます。

その後、そのページ セッション中にプロンプ​​トを表示せずに API を呼び出すことができます。

参考:MDN Geolocation -- 現在位置を見る

于 2012-04-09T18:10:44.000 に答える
4

APIによると、現在のサイトがユーザーの位置情報を取得することをユーザーが既に許可していることを確認することはできません。終わりのない答えを見る

スクリプトを埋め込むときに、ジオロケーション機能を使用するかどうかを伝える引数をユーザーが渡せるようにすることをお勧めします。

于 2012-04-09T18:16:31.093 に答える
2

プロンプトが表示されるかどうかは、ブラウザとその「プライバシー」設定に依存するようです。Safari 6 には 3 つの設定があります。サイトごとに 1 回プロンプト、サイトごとに 1 日 1 回プロンプト、および拒否です。Chrome 23 には 3 つの設定があります。すべて許可、確認、すべて拒否です。ユーザーを煩わすことなく、既に許可されているかどうかを確認する方法があれば、確かにうまくいくでしょう。

于 2012-12-03T23:11:53.367 に答える