任何桌面浏览器都可以检测到计算机何时从睡眠中恢复?

IT技术 javascript sleep
2021-01-15 23:52:30

如果计算机的“唤醒”事件被传播到浏览器并在 JavaScript API 中可用,那就太好了。有谁知道这样的事情是否实施?

6个回答

我不知道有什么直接的方法可以做到这一点,但是您可以很好地了解它何时发生的一种方法是设置一个 setInterval 任务,该任务运行一次,例如每 2 秒运行一次,并存储它上次运行的时间。然后检查它上次运行的时间是否远远超过 2 秒。

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

setInterval(function() {
  var currentTime = (new Date()).getTime();
  if (currentTime > (lastTime + 2000*2)) {  // ignore small delays
    // Probably just woke up!
  }
  lastTime = currentTime;
}, 2000);
@moderns 这是因为网络连接可能尚未完全建立,但警报会暂停脚本,直到用户单击它为止,这有足够的时间让事情运行。
2021-03-17 23:52:30
这与我的处理方式类似 - 只是,使用比两秒大得多的间隔:-) 我想 5 分钟将是一个相当小的值(我的计算机很少休眠一小段时间)。此外,另一种方法是记录发生了多少“滴答”与应该发生的数量(保持平均)。还有可能被边缘化的时间变化(DST - 所以最好使用 UTC - 或用户)的边缘情况。
2021-03-21 23:52:30
是个好主意,但请记住,setInterval并且setTimeout当标签是在后台可以影响执行速度,这是由设计。
2021-04-01 23:52:30
这很好,但是当您在睡眠后触发 ajax 请求时,它失败了!为什么?在调用ajax请求之前有alert语句会解决!为什么?
2021-04-06 23:52:30

使用上述方法可能会遇到的问题之一是警告框或其他模态类型的窗口会暂停 JS 执行,这可能会导致错误的唤醒指示。解决此问题的一种方法是使用网络工作者(在较新的浏览器上受支持)。...

DetectWakeup.js(必须是自己的文件)

var lastTime = (new Date()).getTime();
var checkInterval = 10000;

setInterval(function () {
    var currentTime = (new Date()).getTime();

    if (currentTime > (lastTime + checkInterval * 2)) {  // ignore small delays
        postMessage("wakeup");
    }

    lastTime = currentTime;
}, checkInterval);

然后在您的应用程序中,像这样使用它:

var myWorker = new Worker("DetectWakeup.js");
myWorker.onmessage = function (ev) {
  if (ev && ev.data === 'wakeup') {
     // wakeup here
  }
}
可以给个demo吗?我试过解决它,但它没有给出任何东西。甚至不在控制台中。
2021-04-02 23:52:30

这有点过时了,但根据 Andrew Mu 的回答,我创建了一个简单的 JQuery 插件来做到这一点:https : //github.com/paulokopny/jquery.wakeup-plugin

用法很简单:

$.wakeUp(function(sleep_time) {
    alert("I have slept for " + sleep_time/1000 + " seconds")
});

希望这会在将来对某人有所帮助。

除了其他人的非常好的答案和解释外,您还可以依赖online,offline事件。撇开是否online真的在线不谈,通常,除了真正断开互联网连接之外,当用户的机器从睡眠中恢复时,也会触发此事件。

因此,理想的解决方案是将计时器检查与在线和离线事件相结合。

有趣的建议......我非常希望它可以工作,但它不适合我(macOS 上的 Firefox 71 或 Safari 13,或 Windows 上的 Chrome 78)。这在什么情况下起作用?
2021-03-21 23:52:30
但肯定它按预期工作。查看文档:developer.mozilla.org/en-US/docs/Web/API/Document/ononline
2021-03-28 23:52:30
这在检测计算机是否进入睡眠或唤醒时不起作用,它专门寻找互联网连接关闭或打开
2021-04-07 23:52:30
var lastTime = (new Date()).getTime();

setInterval(function() {
  var currentTime = (new Date()).getTime();
  if (currentTime > (lastTime + 2000*2)) {  // ignore small delays
    setTimeout(function() {
     //enter code here, it will run after wake up
    }, 2000);
  }
  lastTime = currentTime;
}, 2000);
setInterval 函数在系统休眠时运行,setTimeout 函数也在系统休眠时运行,但代码在系统唤醒时运行(事件循环)
2021-03-28 23:52:30