使用setTimout根据用户的焦点改变刷新计时器的问题

时间:2011-06-24 23:38:11

标签: javascript jquery settimeout

我一直在使用ajax调用每隔5秒刷新一次我的webapp元素。我使用setInterval(refreshElements,5000)来实现这一点没有问题。

现在我想考虑用户是否真的在页面上。我设法使用'焦点'和'模糊'事件来检测这个。但是,以下代码确实可以正常工作。如果用户在页面上,我希望每5秒调用一次refreshElements(),但如果用户不在页面上,则每隔15秒调用一次。

现在发生的事情是,除非我正在查看页面,否则计时器似乎会冻结。我已经用Firebug验证了这种行为。我每5秒看一次GET调用,但是一旦我切换到另一个标签,在我切换回原始标签之前不再调用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();
});

1 个答案:

答案 0 :(得分:1)

这是Firebug的一个问题。用代码运行更多测试之后。我意识到我的应用程序行为正常。如果浏览器窗口失去焦点,Firebug将停止捕获GET请求。

我在Chrome中尝试了开发者工具,即使Chrome处于后台,它也会继续捕获GET请求。

此外,我注意到Chrome开发者工具框架可以从您正在查看的网页中删除焦点。

总而言之,这是一个充满启发的24小时。我希望将来帮助某人!