5

Tenga en cuenta que esto se relaciona con los eventos de enfoque y desenfoque en una ventana, no en campos de formulario.window.onfocus no se activa en IE7, incoherente en Opera

Estoy cargando un documento en una ventana emergente, e incluye el siguiente código:

<script type="text/javascript"> 
window.onblur = function(){ document.title="BLURRED"; } 
window.onfocus= function(){ document.title="FOCUSED"; } 
</script> 

Estas funciones son temporales, para la prueba. Esperaba usar estos eventos para establecer un indicador que indicara el estado de la ventana; Estoy haciendo una aplicación de chat, y si los mensajes entran cuando se minimiza voy a hacer algunos cambios de título de atención. Sin embargo, si no se cancelan cuando la ventana se enfoca, serán molestos.

Onload, también puse el foco en un área de texto. (No estoy seguro si eso hace alguna diferencia.)

IE7 (no tengo otra versión a la mano) parece reconocer el window.onblur pero no el window.onfocus. Opera 10 es francamente extraño.

Esto es lo que sucede en los navegadores que tengo. Lanzo la ventana emergente, haga clic en el enlace en la matriz, a continuación, pasar por varios ciclos de minimizar-restaurar haciendo clic en el botón de la ventana emergente en la (Windows XP) barra de tareas:

Safari 4:

  • ventana abierta: Documento abre con título original
  • Minimizar: cambios de título a "ENMASCARADAS"
  • Restaurar: cambios de título a "centrado"

Esto es lo que esperaba que sucediera.

Firefox 3.5:

  • ventana abierta: documento se abre con el título original, y luego cambia a "centrado"
  • Minimizar: título cambia a "ENMASCARADAS"
  • Restaurar: título cambia a " ENFOCADO "

La carga onfocus es un poco sorprendente, pero no es un problema.

IE7:

  • ventana abierta: Documento abre con título original
  • Minimizar: título cambia a "ENMASCARADAS"
  • Restaurar: Título no cambia, no importa cuántas veces lo alternar

¿Qué pasó con onfocus?

Opera 10.5

  • ventana abierta: documento se abre con el título original, pero en otra pestaña, no pop-up

veces ...

  • Minimizar: cambios de título a "ENMASCARADAS"
  • Restaurar: cambios de título a "centrado"

A veces ...

  • Minimizar: cambios de título a "ENMASCARADAS" y luego "centrado"
  • Restaurar: Título no cambia

bien, esto es simplemente extraño ...

Estoy abierto a otros enfoques, pero realmente me gustaría entender lo que está sucediendo aquí, en el viejo Javascript simple - así que por favor no responda jQuery a menos que realmente no haya otra forma de evitar esto.

Gracias!

+1

¿Qué es event.target cuando se minimiza la pestaña Opera y el título aún cambia a 'enfocado'? – hallvors

+1

Probé esto: http://jsbin.com/omeye3 y parece funcionar bien para mí (algunos Opera 10.70 versión de vista previa). ¿Podrías crear una pequeña demostración que te muestra el problema? – hallvors

+0

Existe un comportamiento incorrecto en su prueba jsbin en la Versión 9.20 Build 8771, y la Versión 10.62 Build 3500. –

Respuesta

5

onfocus y onBlur son con errores en el objeto ventana en IE. La alternativa es utilizar el propagar onfocusin y onfocusout eventos:

function focusin() { document.title="BLURRED"; } 
function focusout() { document.title="FOCUSED"; } 

if ("onfocusin" in document) 
    document.onfocusin = focusin, 
    document.onfocusout = focusout; 
else 
    window.onblur = focousout, 
    window.onfocus= focusin; 

He creado un ejemplo para usted here.

focusin y focusOut, a diferencia de enfoque y desenfoque, son eventos que se propagan; dispararán por elementos en la página y burbujearán hacia arriba. Deberá verificar event.srcElement o event.target si no desea actuar en este evento para todos los elementos de la página.

En cuanto a Opera, "extraño" es una palabra que podría usar. La versión de mi máquina no activará el desenfoque ni los eventos de enfoque en la ventana para mí. Con suerte, alguien más puede ofrecerte una solución para eso.

+1

Muchas gracias por esto. Parece que hará el trabajo bien.En cuanto a Opera: esta funcionalidad es simplemente buena, así que espero detectar window.opera y dejarla en seco. –

+1

Si solo va a ser una pequeña molestia hasta que arreglemos los errores de foco/desenfoque, sugiero no detectar window.opera sino simplemente dejarlo defectuoso - de esa manera funcionará bien automáticamente cuando se solucionen;) – hallvors

+0

Eso sería más agradable. Si pudiera garantizar que se quedaría estancado en el estado ENFOQUE, la única consecuencia sería la falta de nuevas notificaciones de mensajes (animaciones de la barra de tareas mediante la manipulación del título). Sin embargo, logré ponerlo en BLURRED, lo que significaría que las animaciones no se cancelaron. Es posible que pueda salirse con la cancelación adicional en el área de texto donde el usuario escribe su mensaje ... –