2016-11-17 8 views
0

私はnavigator.geolocation.watchPosition関数を使用してブラウザの位置がオンかどうかを確認しています。しかし、この関数は複数回呼び出されています(ページ読み込みなし)。たとえば、別のタブに切り替えてページのタブに戻ると、そのタブが呼び出されます。ブラウザの場所がオンになっていることを確認します。一度だけ

私のコードは、私は一度だけその関数を呼び出すことができますどのように

<script> 

navigator.geolocation.watchPosition(function (position) { 
    alert("i'm tracking you!"); 
}, 

function (error) { 
    if (error.code == error.PERMISSION_DENIED){ 
     alert("you denied me :-("); 
    } 
}); 

</script> 

のですか?

+0

と新しいしている場合は、それが動作しませんクッキーフラグまたはウィンドウセッションストレージ – M14

答えて

1

だけwatchPosition関数は、あなたの関数を解雇したかどうかを追跡:

var firedAlready = false; 

navigator.geolocation.watchPosition(function (position) { 
    if(!firedAlready) { 
     alert("i'm tracking you!"); 
     firedAlready = true; 
    } 
}, 

function (error) { 
    if (error.code == error.PERMISSION_DENIED){ 
     alert("you denied me :-("); 
    } 
}); 
+0

を設定するページをリロードすることは、すでに解雇して、再度起動しyuoを再初期化します。データは永続的である必要があります(私の答えを読んでください) –

+0

彼は、ページロードなしで再呼び出しされると言いました。はい、ページロードの間に再度呼び出されることを望まないが、彼はそれを言っていない場合、答えは異なります。 – Joe

+0

あなたは正しいですが、最初から正しい方法を取っていくことは、ステップバイステップ(タイムワイズ)よりも優れていますが、間違いから間違って学習するのが最良の方法です。また、トラッキングを落としてタブを切り替えると、それを受け入れないたびに別のアラートが表示されます(ユーザーフレンドリーではありません)。純粋に私の意見。 –

0

あなたのコードのためのエンクロージャを作成してみてください!これは一度だけ実行されることを確認します。

var something = (function() { 
    var executed = false; 
    return function() { 
     if (!executed) { 
      executed = true; 
      // do something 
     } 
    }; 
})(); 
0

navigator.geolocation.clearWatch()でイベントハンドラを無効にすることも検討してください。詳細については 例えば:

var id; 
id = navigator.geolocation.watchPosition(function (position) { 
    alert("i'm tracking you!"); 
    navigator.geolocation.clearWatch(id); 
}, 
function (error) { 
    if (error.code == error.PERMISSION_DENIED){ 
     alert("you denied me :-("); 
     // I suspect this is actually unnecessary since we were denied. 
     navigator.geolocation.clearWatch(id); 
    } 
}); 

the MDN page about Geolocation.clearWatch()をご確認ください。

0

結果がすでに取得されている場合は、位置リスナーをクリアすることができます。

enter link description here

それとも、多分オンまたはオフであるかどうかをテストするためにnavigator.geolocation.getCurrentPostionを使用しています。

0

長時間の使用のためにローカルストレージにアクセス許可をチェックするステータスを保存するか、そのサイトのクッキーを有効にしてそこの設定を保存する必要があります。

ページがリロードされたときに変数のみを実行すると、変数が再初期化されます。

データを永続化する必要があります。ここから

スタートクッキー http://www.w3schools.com/js/js_cookies.asp

関連する問題