仅在查看页面时运行Javascript Ajax调用

我有一个在控制器上运行的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/

考虑到这一点,如果您的页面使用间隔计时器进行更新,当窗口失去焦点时,您可以终止间隔,然后在窗口聚焦时再次启动它.

相关文章

jQuery插件的种类 1、封装对象方法 这种插件是将对象方法封装起来,用于对通过选择器获取的jQuery对象进...
扩展jQuery插件和方法的作用是非常强大的,它可以节省大量开发时间。 入门 编写一个jQuery插件开始于给...
最近项目中需要实现3D图片层叠旋转木马切换的效果,于是用到了jquery.roundabout.js。 兼容性如图: ht...
一、什么是deferred对象? 开发网站的过程中,我们经常遇到某些耗时很长的javascript操作。其中,既有异...
AMD 模块 AMD(异步模块定义,Asynchronous Module Definition)格式总体的目标是为现在的开发者提供一...