任何桌面浏览器都能检测到计算机何时从睡眠状态恢复?

时间:2010-11-02 15:20:23

标签: javascript sleep

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

6 个答案:

答案 0 :(得分:58)

我不知道有任何直接的方法可以做到这一点,但是你可以很好地了解它何时发生的一种方法是设置一个运行的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);

答案 1 :(得分:20)

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

var myWorker = new Worker("DetectWakeup.js");
myWorker.onmessage = function (ev) {
  if (ev && ev.data === 'wakeup') {
     // wakeup here
  }
}

// DetectWakeup.js (put in a separate file)
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);

答案 2 :(得分:3)

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

用法很简单:

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

希望这将有助于将来。

答案 3 :(得分:0)

除了别人很好的答案和解释之外,您还可以依赖onlineoffline事件。撇开online是否真正在线,通常,此事件还可以在用户的​​计算机从睡眠状态恢复到真正的互联网断开连接时触发。

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

答案 4 :(得分:0)

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);

答案 5 :(得分:0)

另一种方式,使用会话时间

 setInterval(function(){ 
        let last = parseInt(localStorage.getItem('sessionTime'));
        let now =  (new Date()).getTime();

        const diffTime = Math.abs(now - last + 2000 * 2);
        if (diffTime > 480000) {
          _this.authService.logout(1);
        }
       }, 3000);
相关问题