我一直在使用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();
});
答案 0 :(得分:1)
这是Firebug的一个问题。用代码运行更多测试之后。我意识到我的应用程序行为正常。如果浏览器窗口失去焦点,Firebug将停止捕获GET请求。
我在Chrome中尝试了开发者工具,即使Chrome处于后台,它也会继续捕获GET请求。
此外,我注意到Chrome开发者工具框架可以从您正在查看的网页中删除焦点。
总而言之,这是一个充满启发的24小时。我希望将来帮助某人!