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

仅在查看页面时运行Javascript Ajax调用,javascript,jquery,Javascript,Jquery,我有一个在控制器上运行的web应用程序(几乎没有有限的处理、内存和网络带宽)。该页面基本上是一个简单的HTML文件,其中包含应定期更新的LED。在每个时间间隔,Javascript都会向服务器发送一个Ajax请求,并根据回复更新所有指示灯。现在这个很好用 问题是当用户打开其中一个页面并开始浏览其他内容时。出于安全和经济原因,我们不希望在客户端看不到此页面时更新此页面。这是算法: 我开发了这个小测试代码来查看页面事件是如何工作的(): 无标题文件 函数m(msg){ document.getE

我有一个在控制器上运行的web应用程序(几乎没有有限的处理、内存和网络带宽)。该页面基本上是一个简单的HTML文件,其中包含应定期更新的LED。在每个时间间隔,Javascript都会向服务器发送一个Ajax请求,并根据回复更新所有指示灯。现在这个很好用

问题是当用户打开其中一个页面并开始浏览其他内容时。出于安全和经济原因,我们不希望在客户端看不到此页面时更新此页面。这是算法:

我开发了这个小测试代码来查看页面事件是如何工作的():


无标题文件
函数m(msg){
document.getElementById(“logplace”).innerHTML+=msg+“
”; }
如果用户当前正在查看该页面,我只需要更新该页面。我搜索了Stackoverflow,以下线程似乎不是答案:


PS.JQuery也存在于服务器上。但是如果有更简单的方法,我不喜欢使用JQuery。

据我所知,您的数据库中有页面列表。您可以添加一个名为is_view的字段,并在用户每次进入页面时以+1和每次退出页面时以-1更新该字段。因此,如果为==0,则可以执行检查。
我看不到任何其他方法(不是Ajax)来检查另一个页面上的内容。所以你无论如何都必须发送请求

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
}
资料来源:

查看他创建的演示,以便您可以看到它的实际效果:


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

我建议,当您启动窗口(仅在可见时更新)时,您可以从主窗口或具有焦点的其他窗口启动它。结合Francis的焦点解决方案和以下技术,您可以从另一个窗口访问窗口的DOM

您可以查找更多信息。基本上,您将使用以下代码

var pageControl=open('page.html','page name','width=200,height=200')
使用javascript打开页面并能够通过
pageControl
变量访问页面

它通过允许您在其中一个窗口具有焦点时更新页面,控制来自另一个窗口或主窗口的更新来解决此问题。唯一的潜在障碍是兼容性


主窗口解决方案可能更复杂一些。但是如果您从另一个窗口执行此操作,您可以想象,如果您发现没有窗口具有焦点,那么您就不会启动更新脚本。。否则就开枪

这是一个有趣的解决方案。我仍然需要在当前页面被“模糊”或“输入”时触发的页面上“聆听”。我还需要处理当用户关闭一个选项卡而不是简单地切换到另一个选项卡时的特殊情况。我不确定“模糊”事件,但对于关闭、离开和进入有javascript事件,我尝试了它们,并使用一些代码更新了我的问题。仍然不能完全解决问题。请看我对弗朗西斯回答的评论。我怀疑你是否能得到理想的解决方案。尽管他们试图将状态移植到HTTP上,但仍然存在差距。这是其中之一。我不确定我是否能在winforms中100%地实现这一点,而不用在web浏览器中进行大量操作。。。太多的变量不在您的控制之下。嗯,页面主动检测是鼠标悬停,很混乱,但应该可以工作。没有问正确的问题。是否正在查看此页面是关键位。答案是多种多样的,但有可能是不确定的。试着从你的链接问一个关于有焦点的页面元素的问题。我问的是整个页面是否被浏览。页面是一个元素,所以类似的问题……这一个与我想要的非常接近,但有一个问题:用户有两个或多个显示屏,其中一个显示屏保持此网页打开,另一个显示屏工作。即使页面没有焦点但仍然可见,也应该更新页面。唯一不应该更新页面的时间是当页面不可见时(当浏览器最小化或用户切换到另一个选项卡时)。javascript除了检查焦点之外,没有其他方法可以告诉您。
var pageControl=open('page.html','page name','width=200,height=200')