使用setTimout更改刷新计时器取决于用户焦点的问题

|| 我一直使用ajax调用每5秒刷新一次我的Web应用程序的某些元素。我没有问题使用setInterval(refreshElements,5000)来实现这一目标。 现在,我想考虑用户是否实际在页面上。我设法使用\'focus \'和\'blur \'事件来检测到这一点。但是,以下代码确实可以正常工作。我希望如果用户在页面上每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();
});
    
已邀请:
        这是Firebug的问题。用代码运行更多测试之后。我意识到我的应用程序运行正常。如果浏览器窗口失去焦点,Firebug将停止捕获GET请求。 我在Chrome中尝试了Developer Tools,即使Chrome在后台,它仍然可以捕获GET请求。 此外,我注意到Chrome开发者工具框架可以将焦点从您正在查看的网页上移开。 总而言之,这已经是24小时了。希望以后能对您有所帮助!     

要回复问题请先登录注册