2010-11-02 13 views
41

Sarebbe bello se l'evento "wake up" del computer fosse propagato al browser e disponibile nell'API JavaScript. Qualcuno sa se qualcosa di simile è implementato?È possibile che qualsiasi browser desktop rilevi quando il computer viene riattivato dallo stato di sospensione?

+0

Ne dubito dato che sarebbe probabilmente per colmare il divario tra il browser e il sistema operativo isolato, ma io essere interessato a scoprirlo è, infatti, possibile. –

+0

Che tipo di dispositivo? –

+0

Definisci "sleep", poiché questo termine varia ampiamente per dispositivo. –

risposta

51

Non conosco alcun metodo diretto per farlo, ma un modo in cui è possibile avere una buona idea di quando accade è impostare un task setInterval che viene eseguito, ad esempio ogni 2 secondi, e memorizza il tempo in cui esso scorso corso. Quindi controlla se l'ultima volta che è stato eseguito è molto più vecchio di 2 secondi.

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

Questo è simile a come farei su di esso - solo, utilizzare un intervallo molto più grande di due secondi :-) Immagino che i 5 minuti siano un valore ragionevolmente piccolo (è raro che il mio computer dorma per una piccola quantità di tempo) . Inoltre, un altro modo è quello di registrare quante "zecche" si sono verificate rispetto a quante si supponeva dovessero verificarsi (tenerlo in media). C'è anche il caso limite di una variazione di orario (ora legale, quindi è meglio usare UTC o utente) che può essere marginalizzato. –

+1

+1 per una ragionevole soluzione :) –

+0

Mi ha aiutato :) +1 – Varun

3

Questo è un po 'datata, ma in base alla risposta da Andrew Mu ho creato un semplice plugin jQuery per farlo: https://bitbucket.org/paul.okopny/jquery.wakeup-plugin/wiki/Home

L'uso è semplice:

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

Spero che questo aiuti qualcuno in futuro.

16

Uno dei problemi che potrebbero verificarsi con i metodi precedenti è che le finestre di avviso o altre finestre di tipo modale interromperanno l'esecuzione di JS causando probabilmente un'indicazione di falso risveglio. Un modo per risolvere questo problema è quello di utilizzare i lavoratori web (supportato nei browser più recenti) ....

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

Potresti per favore fare una dimostrazione? Ho provato a risolverlo, ma non mi da niente. Neanche nella console. –

Problemi correlati