Can any desktop browsers detect when the computer resumes from sleep?

JavascriptSleep

Javascript Problem Overview


It would be nice if the computer's 'wake up' event was propagated to the browser and available in the JavaScript API. Does anyone know if anything like this is implemented?

Javascript Solutions


Solution 1 - Javascript

I don't know of any direct method to do this, but one way you could get a good idea of when it happens is to set up a setInterval task that runs, say every 2 seconds, and stores the time it last ran. Then check to see if the last time it ran is very much older than 2 seconds.

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

Solution 2 - Javascript

One of the problems you might encounter with methods above is that alert boxes or other modal type windows will pause JS execution possibly causing a false wake up indication. One way to solve this problem is to use web workers (supported on newer browsers)....

DetectWakeup.js (must be its own 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);

then in your application, use it like this:

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

Solution 3 - Javascript

This is a little outdated, but based on the answer by Andrew Mu I've created a simple JQuery plugin to do that: https://github.com/paulokopny/jquery.wakeup-plugin

Usage is simple:

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

Hope this will help someone in the future.

Solution 4 - Javascript

Apart from very good answers and explanations by others, you can also depend on online, offline events. Keeping aside whether online is really online or not, usually, this event ALSO gets triggered when user's machine is back from sleep apart from having real internet disconnection.

So, the ideal solution would be having timer check combined with the online and offline events.

Solution 5 - Javascript

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

Solution 6 - Javascript

Another way, using the session time

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

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionZak LinderView Question on Stackoverflow
Solution 1 - JavascriptandrewmuView Answer on Stackoverflow
Solution 2 - JavascriptLynn NeirView Answer on Stackoverflow
Solution 3 - JavascriptPaul OkopnyView Answer on Stackoverflow
Solution 4 - JavascriptbrightDotView Answer on Stackoverflow
Solution 5 - JavascriptSerhii LyzunView Answer on Stackoverflow
Solution 6 - JavascriptbazobehramView Answer on Stackoverflow