2009-12-03 9 views
6

Estoy escribiendo una aplicación web que realiza una acción cada minuto aproximadamente que (muy brevemente) bloquea el navegador. Me gustaría detener esta acción cuando no se muestra la pestaña que muestra la aplicación web, para minimizar la molestia. ¿Hay alguna forma de hacer esto usando Javascript, bajo la última versión de Firefox?Detectando la visibilidad de las pestañas en Firefox

Editar: Para aclarar, estoy preguntando cómo determinar la visibilidad de la pestaña en la que se está ejecutando algún código JS, no cómo pausar/reanudar la acción que bloquea el navegador.

Respuesta

7
var isFocused = true; 

window.onblur=function(){ 
    if(isFocused==true){ 
    isFocused=false; 
    } 
} 

window.onfocus = function(){ 
    isFocused = true; 
} 

Ahora, esa acción que realiza, cada minuto o dos, hágalo solo cuando isFocused sea verdadero. Es entonces cuando la pestaña de su página/aplicación web está enfocada.

+0

¿por qué el cheque if (isFocused == verdadero)? –

+0

Estaba usando una alerta durante la depuración, cuando apareció, también disparó el evento de desenfoque y fue un desastre total: D. Además, Firefox no reconoce y notifica JavaScript sobre el cambio de pestañas en tiempo real con mucha precisión. (Sé por experiencia el desarrollo de complementos) A veces, es posible que estos eventos se activen dos veces, etc. Dependiendo de su código, esto puede ser inofensivo o arruinarlo por completo. Por lo tanto, solo me aseguro de configurar la variable como 'desenfocada' solo si está enfocada ahora. ¿Por qué cambiarlo a "desenfocado" cuando ya está "desenfocado"? Obtener lo que estoy diciendo? –

+0

Ya veo. Pero la declaración if solo tiene sentido si realmente estás haciendo algo dentro de ella (algo que podría arruinar tu página si la ejecutaras dos veces seguidas). En este caso concreto, es totalmente redundante, ya que no importa si la variable se establece dos veces con el mismo valor ... –

2

no han sido evaluados, pero ¿qué tal esto:

window.onblur() = function() { ... pause your script here }

No sé si Firefox se encarga de la falta de definición de ventana en pestañas como ventanas separadas.

+0

Acabo de probar esto y funciona (tenga en cuenta que utilicé jQuery para adjuntar el controlador de eventos a onblur). –

+0

Aparte del hecho de que 'onblur()' debería ser 'onblur', creo que podría funcionar. Sin embargo, lo que realmente me gustaría hacer es poder verificar si la ventana tiene foco o no. –

1

creo que tendrá que conformarse con el evento window.onblur, porque el acceso a la ventana del navegador desde un script en una página web que está prohibido por razones de seguridad (solamente se permiten para los scripts privilegiados).

Lo que quiere hacer (acceder a la ventana del navegador desde una ventana secundaria o una página web) se describe en Mozilla Developer Center, pero menciona que solo un script privilegiado puede hacerlo, y probablemente obtendrá un " Error de premisión "error cuando lo intenta.

Cuestiones relacionadas