2009-06-24 59 views
20

Estoy buscando un evento que se activará cada vez que el usuario cambie de la página a otra pestaña, y otro evento que se active cuando el usuario vuelva a la pestaña.Evento para cuando el usuario cambia las pestañas del navegador

window.onblur y window.onfocus don't seem to work correctly en todos los navegadores

¿Existe un proxy que yo pude ver el fin de sintetizar este evento?

+0

Estoy bastante seguro de que esto no es posible, al menos en todos los navegadores. –

+0

En realidad, la compatibilidad entre navegadores [no parece tan mala] (http://www.quirksmode.org/dom/events/blurfocus.html). Obtienes algunos eventos duplicados con Firefox y Safari/Windows, pero eso debería ser bastante fácil de solucionar. 'window.onfocus/onblur' ha estado disponible desde antes de las Guerras del navegador, y su comportamiento no ha cambiado mucho. Aparentemente hay algunos _bugs_ en implementaciones, pero no hay _semantics_ diferentes. – lanzz

Respuesta

30

Puede intentar utilizar un marco, como MooTools o jQuery, que proporcionan compatibilidad con varios navegadores. Deberían poder detectar con más fiabilidad los eventos blur y focus para la ventana del navegador.

Yo personalmente he utilizado jQuery con mucho éxito:

$(window).blur(function(e) { 
    // Do Blur Actions Here 
}); 
$(window).focus(function(e) { 
    // Do Focus Actions Here 
}); 
+0

Genial, podría echar un vistazo a cómo se implementan en jQuery – EoghanM

+0

@Daniel Hey, en realidad estaba buscando un tipo de funcionalidad similar. $ (ventana) .focus (función (e) {// Hacer acciones de enfoque aquí}); El contenido dentro del foco se ejecutará cada vez que exista alguna otra funcionalidad ajax en la página, pero un pequeño cambio, 1. ¿Es posible ejecutar el código dentro de este SOLO UNA VEZ, cuando el usuario navega hacia adelante y hacia atrás entre la misma página. –

+1

_5 años después: _ ¡Gracias amigo! – MCTaylor17

6

También puede tratar de utilizar VisibilityAPI.

document.addEventListener("visibilitychange", function() { 
    if (document.hidden){ 
     console.log("Browser tab is hidden") 
    } else { 
     console.log("Browser tab is visible") 
    } 
}); 

See also here on Stackoverflow (possible duplicate)

+1

Un enlace a una posible solución siempre es bienvenido, pero por favor [agregue contexto alrededor del enlace] (// meta.stackoverflow.com/a/8259) para que los demás usuarios tengan una idea de qué se trata es y por qué está allí. ** Siempre cite la parte más relevante de un enlace importante, en caso de que el sitio objetivo no esté disponible o permanezca desconectado de forma permanente. ** Tenga en cuenta que ser apenas más que un enlace a un sitio externo es una posible razón para [por qué ¿Cómo se eliminan algunas respuestas?] (// stackoverflow.com/help/deleted-answers). – Makyen

Cuestiones relacionadas