早上好,我正在寻找某种Javascript事件,我可以用它来检测移动浏览器窗口何时重新获得焦点,用户关闭/最小化浏览器后(回到主屏幕/不同的应用程序) ,或者设备是否从睡眠状态恢复(用户将其关闭,或者在屏幕超时后进入休眠状态)。
我希望能够找到适用于所有事情的单一事件,但我知道这不太可能! pageshow
事件适用于iOS设备,但与其他所有设备一起使用时相当粗略。我已经尝试了focus
和DOMActivate
,但它们似乎都没有达到预期的效果。
页面上可能并不总是有表单元素,我真的不希望用户再次触摸页面来触发事件。
此类事件的要求是由我们的代码通过发出XHR请求定期检查新内容引起的。当浏览器处于睡眠状态时,它们永远不会被发送,因此我们永远不会获得重新启动超时的新内容。
感谢您提供的任何帮助!
答案 0 :(得分:12)
我们遇到了类似的问题并解决了类似问题:
var lastSync = 0;
var syncInterval = 60000; //sync every minute
function syncPage() {
lastSync = new Date().getTime(); //set last sync to be now
updatePage(); //do your stuff
}
setInterval(function() {
var now = new Date().getTime();
if ((now - lastSync) > syncInterval ) {
syncPage();
}
}, 5000); //check every 5 seconds whether a minute has passed since last sync
这样,如果您的页面处于活动状态,您将每分钟同步一次,并且如果您将浏览器置于空闲模式超过一分钟,则在您再次打开浏览器同步之前最多会经过5秒。较短的间隔时间可能比你想要的更多地耗尽电池,所以在根据你的需要调整时间时要记住这一点。
答案 1 :(得分:0)
比间隔更好的是添加窗口模糊侦听器和窗口焦点侦听器。在模糊时,记录当前时间。在焦点上,验证您仍然登录/同步/无论您需要做什么。
基本上完全相同的东西,但只在必要时运行,而不是以间隔减慢整个页面。
<强>更新强>
$(document.body).on("click scroll keyup", "", null, $window.declareActivity);
虽然如果手机电源关闭,这种模糊事件看起来很粗略,但我不知道在任何情况下/移动设备都会相信它。所以我可能会抛出这样的东西:
{{1}}
这样我的不活动计时器就可以在用户离开时使用。根据您的网站,您可能希望调整该确切的事件列表 - 或者只是引入$ window.declareActivity();进入响应用户输入的现有脚本。