用于移动浏览器重新启动或设备唤醒的Javascript事件

时间:2012-12-10 09:53:18

标签: javascript android ios mobile

早上好,我正在寻找某种Javascript事件,我可以用它来检测移动浏览器窗口何时重新获得焦点,用户关闭/最小化浏览器后(回到主屏幕/不同的应用程序) ,或者设备是否从睡眠状态恢复(用户将其关闭,或者在屏幕超时后进入休眠状态)。

我希望能够找到适用于所有事情的单一事件,但我知道这不太可能! pageshow事件适用于iOS设备,但与其他所有设备一起使用时相当粗略。我已经尝试了focusDOMActivate,但它们似乎都没有达到预期的效果。

页面上可能并不总是有表单元素,我真的不希望用户再次触摸页面来触发事件。

此类事件的要求是由我们的代码通过发出XHR请求定期检查新内容引起的。当浏览器处于睡眠状态时,它们永远不会被发送,因此我们永远不会获得重新启动超时的新内容。

感谢您提供的任何帮助!

2 个答案:

答案 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();进入响应用户输入的现有脚本。