我有一个在控制器上运行的Web应用程序(几乎没有限制的处理,内存和网络带宽).该页面基本上是一个充满LED的简单HTML文件,应该按间隔更新.在每个时间间隔,Javascript向服务器发送Ajax请求,并根据回复更新所有LED.现在这个工作正常!
问题是当用户打开其中一个页面并开始浏览其他内容时.出于安全性和经济原因,我们不希望在客户端未看到此页面时更新页面.这是算法:
我开发了这个小测试代码,看看页面事件是如何工作的(see live on jsFiddle):
Meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
我需要页面才能在用户当前正在查看时才更新.我搜索了Stackoverflow,以下线程似乎不是答案:
> Keep track of which tab was being viewed when page is refreshed
> How to run multiple ajax calls on one page
> Function repeating when page not being viewed
PS. JQuery也存在于服务器上.但如果有一种更简单的方法,我宁愿不使用JQuery.
最佳答案
var focused = false;
function onBlur() {
focused = false;
};
function onFocus(){
focused = true;
};
if (/*@cc_on!@*/false) { // check for Internet Explorer
document.onfocusin = onFocus;
document.onfocusout = onBlur;
} else {
window.onfocus = onFocus;
window.onblur = onBlur;
}
然后你的JavaScript可以检查
if (focused)
{
// process ajax
}
来源:http://www.thefutureoftheweb.com/blog/detect-browser-window-focus
查看他创建的演示,以便您可以看到它的实际应用:http://www.thefutureoftheweb.com/demo/2007-05-16-detect-browser-window-focus/
考虑到这一点,如果您的页面使用间隔计时器进行更新,当窗口失去焦点时,您可以终止间隔,然后在窗口聚焦时再次启动它.