好吧,你不得不手工编写它,这是不是真的很难。您可以使用onfocus和的onblur功能,做这样的事情:
$(function() {
window.isActive = true;
$(window).focus(function() { this.isActive = true; });
$(window).blur(function() { this.isActive = false; });
showIsActive();
});
function showIsActive()
{
console.log(window.isActive)
window.setTimeout("showIsActive()", 2000);
}
function doWork()
{
if (!window.isActive) { /* Check for idle time */}
}
如果你犯了一个小的搜索,你可以找到这个问题的varaieties已经被提问和回答,你也许可以找到一个解决方案,你可以用你提到的其中一个插件来实现。
尝试: Run setTimeout only when tab is active 或 How to tell if browser/tab is active
编辑 - >新增:
或者我会尝试不同的方法。你可以创建一些散列一个cookie并保存散列与更新每当窗口被激活时间戳的DB(你可以检查每5秒什么的,它不是一个密集的要求)
然后,之前做的另一项检查(但在相同的请求中)查看自上次时间戳以来已过去多少时间,并在必要时将其注销。
当时间过去时,它不会将其注销,但当它们尝试通过再次打开或关注选项卡/窗口尝试访问该站点时,它将不会被注销。
是的你是对的。我不得不最终选择AsynchronousSessionAuditor来解决这个问题,因为跨标签和窗口的客户端事件不能专门处理,而不需要在下面将数据保存到服务器端(由Ryoku指定)。 – Lin 2013-05-20 00:50:53