如何仅在活动选项卡上更新我的实时动态列表更新或在选项卡再次激活时更新它?

问题描述:

我有一个每10秒更新一次的Live Feed JQuery框,并将网站的最新评论置顶。这工作正常:jquery发出一个Ajax请求,调用一个PHP,它返回新的项目或没有。如何仅在活动选项卡上更新我的实时动态列表更新或在选项卡再次激活时更新它?

这个盒子就像一个侧栏,它在我网站的每一页上。我的问题是,如果用户在网站上打开很多页面,他打开的每个选项卡都会执行此自动刷新,直到他关闭该选项卡。因此,即使Live Feed已经过优化,并且其后面的SQL查询速度很快(每个查询为0.0005秒),但每个打开多个页面的几十个用户都会成为问题。此外,如果用户使用一些打开的选项卡打开浏览器,并开始浏览其他地方,或观看电影,他们将永远更新,或直到他关闭它们。

那么对此有什么好的解决方案?只有在其选项卡/窗口可见/活动的情况下,我才可以更新我的提要?如果它没有活动并且现在再次激活,是否会发生事件?

尝试在窗口对象上添加onFocus事件以触发更新并添加onBlur以停止更新您的实时供稿。

由于您使用jQuery的你可以这样做

$(window).('focus',function(){ 
    //do updates 
}) 

$(window).('blur',function(){ 
    //stop updates 
}) 
+0

这些是一次性事件还是属性?我的意思是“//更新”部分将持续工作,直到窗口处于焦点状态,或者在焦点聚焦后才被触发一次。 – ZTefter 2012-03-23 19:27:39

+0

它会被触发一次,同时为了更新你必须使用定时器函数(setInterval)来触发每个10secs,在这种情况下,onblur只需清除时间间隔id来停止更新。 – Abhidev 2012-03-23 19:36:33

虽然我用这个Detecting focus of a browser window和我在这里分享给大家谁需要这个没有jQuery的,我会接受上面的答案,因为它似乎是一个优雅和清晰的解决方案,我的原始问题。