web-dev-qa-db-ja.com

ユーザーのジェスチャーに応じて位置情報のみを要求しますか?

Chrome 64に更新し、webappでこのメッセージに気付き始めました。

[Violation] Only request geolocation information in response to a user gesture.

これは過度に制限されているようです。 Googleマップでナビゲートしているときに、「ロケーションの更新」を繰り返しクリックする必要はありません。ロケーションポーリングの代替手段は何ですか?

現在、次のコードを使用しています。

let locInt = self.setInterval(function(){
    navigator.geolocation.getCurrentPosition(geoSuccess, geoError, geoOptions);
},5000);

私たちのアプリは位置情報に基づいており、常に更新される位置に依存しています。ここで好ましい方法は何ですか?

9

watchPosition()メソッドを使用すると、デバイスの位置が変わるたびにブラウザーが自動的に呼び出すハンドラーを登録できます。これはポーリングよりも望ましい方法です。

id = navigator.geolocation.watchPosition(success[, error[, options]])

https://developer.mozilla.org/en-US/docs/Web/API/Geolocation/watchPosition

6
Kayce Basques

Googleから 推奨notがあり、ページの読み込み時に位置情報を読み込むようです:

ユーザーは、ページの読み込み時に自動的に場所を要求するページに不信感を抱いたり、混乱したりします。ページの読み込み時にユーザーの位置を自動的に要求するのではなく、「近くの店舗を検索」ボタンをタップするなど、ユーザーのジェスチャーに要求を結び付けます。ジェスチャがユーザーの位置の必要性を明確かつ明示的に表現していることを確認してください。

watchPosition()またはgetCurrentPosition()を使用するかどうかは関係ありません。

Lighthouseは、ページの読み込み時に実行されたJavaScriptを収集します。このコードにgeolocation.getCurrentPosition()またはgeolocation.watchPosition()の呼び出しが含まれていて、ジオロケーション許可がまだ付与されていない場合、ユーザーのロケーションが要求されました。

また、Chrome update。

16
Stephan