首页 > 解决方案 > 使用 JS 识别计算机已从睡眠模式中唤醒

问题描述

我正在寻找某种方法来识别计算机已从睡眠模式中唤醒。我遇到了这篇文章,它使用 setInterval 中的日期时间戳来识别它。

它在 Firefox 中完美运行,但在其他浏览器(Chrome、Safari 和 Edge)中无法正常运行。在大约 6 分钟的不活动(并且没有焦点)之后,时间戳差异变得大于超时,然后触发唤醒功能。

var TIMEOUT = 20000;
var lastTime = (new Date()).getTime();

setInterval(function() {
  var currentTime = (new Date()).getTime();
  if (currentTime > (lastTime + TIMEOUT + 2000)) {
    // Wake!
  }
  lastTime = currentTime;
}, TIMEOUT);

有没有其他方法可以识别计算机已从睡眠模式唤醒?

标签: javascript

解决方案


浏览器在管理功耗方面变得越来越积极,尤其是来自非活动窗口或选项卡的功耗。一个快速的“safari settimeout javascript inactive throttle”的duckduckgo会给你很多点击。一段时间后,可以理解的是,浏览器可能会忽略您请求的超时间隔,添加指数延长超时,或完全冻结 javascript。我个人很高兴他们这样做。

我怀疑有没有办法解决这个问题,因为任何漏洞都会被利用,即使用户数小时或数天没有查看该窗口选项卡,网站也将再次能够消耗 CPU 周期并因此耗电。

如果有(或有一天)解决这个问题的方法,它可能看起来像 iOS 应用程序的工作方式,应用程序被冻结但可以请求为非常特定的事件唤醒后台任务。


推荐阅读