私はWebアプリケーションの特定の要素を5秒ごとに更新するためにajax呼び出しを使用しています。これを達成するためにsetInterval(refreshElements、5000)を使用しても問題はありませんでした。setTimoutを使用してユーザーのフォーカスに応じてリフレッシュタイマーを変更するときの問題
ここでは、ユーザーが実際にページにいるかどうかを考慮する必要があります。私は 'フォーカス'と 'ボケ'イベントを使用してこれを検出することができました。しかし、以下のコードは意図したとおりに動作します。ユーザーがページにいる場合は5秒ごとにrefreshElements()を呼び出すが、ユーザーがページにない場合は15秒ごとに呼び出されるようにする。
今は、ページを表示していない限り、タイマーがフリーズしているように見えます。私はFirebugでこの動作を確認しました。 GETコールは5秒ごとに呼び出されますが、別のタブに切り替えると、元のタブに戻るまでGETが呼び出されなくなります。何か案は?ここで
はコードです:
$(document).ready(function(){
var refreshinterval = 5000;
var timer;
$(window).bind("blur", function() {
refreshinterval = 15000;
});
$(window).bind("focus", function() {
refreshinterval = 5000;
});
function refreshElements(){
clearTimeout(timer);
$.ajax({
type: "GET",
dataType: 'json',
url: "refresh_url",
cache: false,
success: function(data){
// fill the desired page elements
}
});
timer = setTimeout(refreshElements, refreshinterval);
}
refreshElements();
});
bind()の代わりにlive()を使用して、それが何かを確認しようとしました – ryuutatsuo
@ryuutatsuo live()を使用しようとしましたが、動作を変更しませんでした。なぜ私の古いsetInterval()が5秒ごとにトリガするのか分からないのですが、setTimeout()を使ってページを表示していなくても、タイマーはフォーカスなしでフリーズします。 –