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

bri*_*ns0 12 javascript mobile android ios

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

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

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

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

感谢您提供的任何帮助!

小智 15

我们遇到了类似的问题并解决了类似这样的问题:

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
Run Code Online (Sandbox Code Playgroud)

这样,如果您的页面处于活动状态,您将每分钟同步一次,如果您将浏览器置于空闲模式超过一分钟,则在您再次打开浏览器同步之前最多会经过5秒钟.短时间间隔可能会使电池消耗的电量超出您的预期,因此在根据您的需要调整时间时请记住这一点.

  • 2019 年更新:如果您像我一样偶然发现了这个(优秀且仍在工作)答案,您还可以查看最近的 [Page Visibility API](https://developer.mozilla.org/en-US/docs/Web /API/Page_Visibility_API),它在 iOS 12.4 上的 Safari、Firefox 和 Chrome 中为我工作(*编辑:格式) (2认同)