javascript - 使用 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);
有没有其他方法可以识别计算机已从睡眠模式唤醒?
解决方案
浏览器在管理功耗方面变得越来越积极,尤其是来自非活动窗口或选项卡的功耗。一个快速的“safari settimeout javascript inactive throttle”的duckduckgo会给你很多点击。一段时间后,可以理解的是,浏览器可能会忽略您请求的超时间隔,添加指数延长超时,或完全冻结 javascript。我个人很高兴他们这样做。
我怀疑有没有办法解决这个问题,因为任何漏洞都会被利用,即使用户数小时或数天没有查看该窗口选项卡,网站也将再次能够消耗 CPU 周期并因此耗电。
如果有(或有一天)解决这个问题的方法,它可能看起来像 iOS 应用程序的工作方式,应用程序被冻结但可以请求为非常特定的事件唤醒后台任务。
推荐阅读
- flutter - OnPressed 对字体颜色的影响
- javascript - 从原型方法访问静态属性
- php - 如何获得多次声明的参数值
- javascript - epubjs reader Rendition spread() 一页未与中心对齐
- java - 如何在 Maven 中覆盖字符集?
- mysql - 如何选择一行或另一行
- angular - 如何在 Angular 中扩展或添加数据到 cdk-steps?
- javascript - 如何在javascript中使用正则表达式格式化文本?
- php - 如何在 psql 上正确选择
- angular - 在下拉列表中未选择任何内容时,Angular 9禁用按钮