如何设置AJAX间隔,以便仅在页面仍处于焦点时才刷新?

时间:2017-10-27 16:12:24

标签: javascript php session refresh intervals

我创建了一个小脚本来保持PHP会话处于活动状态,即使用户没有刷新页面也是如此。

以下是我通过PHP使用以保持会话活跃的Javascript:

refreshTheSession.php

它工作正常,但我注意到即使页面没有聚焦也会继续调用{{1}}脚本,我不想要因为这意味着某人可以使用该页面打开一个标签,并使会话无限期地保持活跃,即使他们在另一个标签上做其他事情也是如此。

如果用户仍然主动访问相关网页,我只希望会话保持活跃状态​​。

有可能吗?如果是这样,我如何修改上面的代码才能做到这一点?

1 个答案:

答案 0 :(得分:2)

你不能告诉我什么"没有用?"确切地说,但我评论的第二个链接,页面可见性API,肯定会做你要求的,正如在这个工作示例中可以看到的那样:



function isDocumentVisible() {
	return !(document.hidden || document.webkitHidden || document.msHidden);
}

// this is what you'd output via PHP:
setInterval(function(){
	if (isDocumentVisible()) {
  	$.post('/refreshTheSession.php');}
  }
 , 90000);

// for the sake of demonstrating that this example is indeed working:
window.setInterval(function() {
console.log(isDocumentVisible() ? "document is visible, refresh session" : "document is not visible, don't refresh session");
}, 1000);




更新:使用document.setFocus(),它看起来像这样:



// this is what you'd output via PHP:
setInterval(function(){
	if (document.hasFocus()) {
  	$.post('/refreshTheSession.php');}
  }
 , 90000);

// for the sake of demonstrating that this example is indeed working:
window.setInterval(function() {
console.log(document.hasFocus() ? "document has focus, refresh session" : "document does not have focus, don't refresh session");
}, 1000);

Click into and out of the result iframe to see the focus change.