Могут ли какие-либо браузеры на рабочем столе определить, когда компьютер выходит из спящего режима? - PullRequest
54 голосов
/ 02 ноября 2010

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

Ответы [ 5 ]

60 голосов
/ 02 ноября 2010

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

Одна из проблем, с которой вы можете столкнуться при использовании вышеуказанных методов, заключается в том, что окна предупреждений или другие окна модального типа приостанавливают выполнение 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 голосов
/ 03 августа 2013

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

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

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

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

1 голос
/ 02 июля 2018

Помимо очень хороших ответов и объяснений от других, вы также можете зависеть от online, offline событий. Не обращая внимания на то, действительно ли online подключен к сети или нет, обычно это событие ТАКЖЕ запускается, когда компьютер пользователя возвращается из спящего режима, кроме реального отключения от Интернета.

Таким образом, идеальным решением была бы проверка таймера в сочетании с онлайн и офлайн событиями.

0 голосов
/ 23 октября 2018
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);
...