Могут ли какие-либо настольные браузеры обнаруживать, когда компьютер возобновляет сна?

Было бы неплохо, если бы событие "пробуждения" компьютера было распространено в браузере и доступно в JavaScript API. Кто-нибудь знает, реализовано ли что-то подобное?

Ответ 1

Я не знаю какого-либо прямого метода для этого, но один из способов получить представление о том, когда это произойдет, - это настроить задачу 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);

Ответ 2

Одна из проблем, с которой вы можете столкнуться с вышеприведенными методами, заключается в том, что окна предупреждений или другие окна модального типа приостанавливают выполнение JS, что может вызвать ложное срабатывание пробуждения. Одним из способов решения этой проблемы является использование веб-работников (поддерживается в новых браузерах)....

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

Ответ 3

Это немного устарело, но, основываясь на ответе Эндрю Му, я создал простой плагин JQuery для этого: https://bitbucket.org/paul.okopny/jquery.wakeup-plugin/wiki/Home

Использование прост:

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

Надеюсь, это поможет кому-то в будущем.