2010-11-02 14 views
41

Sería bueno si el evento de "activación" de la computadora se propagara al navegador y estuviera disponible en la API de JavaScript. ¿Alguien sabe si se implementa algo como esto?¿Pueden los navegadores de escritorio detectar cuando la computadora reanuda el sueño?

+0

lo dudo ya que probablemente tendría que cerrar la brecha entre el navegador y el sistema operativo aislado, pero lo estar interesado en descubrirlo es, de hecho, posible. –

+0

¿Qué tipo de dispositivo? –

+0

Define "dormir", ya que este término varía mucho por dispositivo. –

Respuesta

51

No conozco ningún método directo para hacer esto, pero una forma de tener una buena idea de cuándo sucede es configurar una tarea setInterval que se ejecuta, digamos cada 2 segundos, y almacena el tiempo último corrió. Luego verifique si la última vez que se ejecutó es mucho mayor que 2 segundos.

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

Esto es similar a cómo lo haría - solo, use un intervalo mucho mayor que dos segundos :-) Imagino que 5 minutos sería un valor razonablemente pequeño (es raro que mi computadora duerma por una cantidad de tiempo pequeña) . Además, otra forma es registrar cuántos "tics" ocurrieron frente a cuántos se suponía que debían ocurrir (manteniéndolo en promedio). También está el caso límite de un cambio de hora (DST, por lo tanto, es mejor utilizar UTC o usuario) que puede estar marginado. –

+1

+1 para una solución razonable :) –

+0

Me ayudó :) +1 – Varun

3

Esto es un poco anticuado, pero en base a la respuesta de Andrew Mu he creado un simple plugin de jQuery para hacer eso: https://bitbucket.org/paul.okopny/jquery.wakeup-plugin/wiki/Home

uso es simple:

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

Espero que esto ayude a alguien en el futuro.

16

Uno de los problemas que puede encontrar con los métodos anteriores es que los cuadros de alerta u otras ventanas de tipo modal pausarán la ejecución de JS posiblemente causando una indicación de activación falsa. Una forma de resolver este problema es utilizar trabajadores web (con soporte en los nuevos navegadores) ....

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

¿Podría dar una demostración? He intentado resolverlo, pero no da nada. Ni siquiera en la consola. –

Cuestiones relacionadas