5

Si noti che questo si riferisce agli eventi di messa a fuoco e sfocatura su una finestra, non sui campi modulo.window.onfocus non attivato in IE7, incoerente in Opera

che sto caricando un documento in una finestra pop-up, e include il seguente codice:

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

Queste funzioni sono temporanee, per il test. Speravo di usare questi eventi per impostare una bandiera che indica lo stato della finestra; Sto facendo un'app di chat e, se i messaggi arrivano quando è ridotto a icona, farò delle modifiche al titolo che attirino l'attenzione. Se non si annullano quando la finestra viene messa a fuoco, però, saranno semplicemente noiosi.

Onload, ho anche messo a fuoco in una textarea. (Non sono sicuro se ciò faccia differenza.)

IE7 (Non ho un'altra versione a portata di mano) sembra riconoscere lo window.onblur ma non lo window.onfocus. Opera 10 è semplicemente decisamente strano.

Ecco cosa succede nei browser che ho. Io lancio la finestra pop-up cliccando sul link nel genitore, quindi passare attraverso diverse minimizzare-ripristinare i cicli facendo clic sul pulsante del popup sul simbolo (Windows XP) barra delle applicazioni:

Safari 4:

  • finestra aperta: Il documento si apre con titolo originale
  • Ridurre al minimo: titolo passa a "VAGO"
  • Restore: titolo passa a "focalizzata"

Questo è quello che mi aspettavo che accadesse.

Firefox 3.5:

  • Finestra aperta: Il documento si apre con il titolo originale, poi cambia a "focalizzata"
  • Ridurre al minimo: Titolo passa a "VAGO"
  • Restore: Titolo modifiche " MESSA A FUOCO "

L'onload di onfocus è un po 'una sorpresa, ma non è un problema.

IE7:

  • Finestra aperta: Il documento si apre con titolo originale
  • Minimizzare: Titolo passa a "VAGO"
  • Restore: Titolo non cambia, non importa quante volte ho Toggle

Che cosa è successo a onfocus?

Opera 10.5

  • Finestra aperta: Il documento si apre con il titolo originale, ma in un'altra scheda, non pop-up

volte ...

  • Ridotta: Titolo cambia in "VAGO"
  • Restore: Titolo passa a "focalizzata"

A volte ...

  • Minimizzare: Titolo passa a "VAGO", quindi "focalizzata"
  • Restore: Titolo non cambia

Okay, questo è semplicemente strano ...

Sono aperto ad altri approcci, ma mi piacerebbe davvero capire cosa sta succedendo qui, in semplice vecchio Javascript - quindi per favore non dare una risposta jQuery a meno che non ci sia davvero un altro modo per aggirare questo.

Grazie!

+1

Che cos'è event.target quando la scheda Opera è ridotta a icona e il titolo cambia ancora in "focalizzato"? – hallvors

+1

Provato questo: http://jsbin.com/omeye3 e sembra funzionare bene per me (alcune build di anteprima di Opera 10.70). Potresti creare una piccola demo che mostri il problema per te? – hallvors

+0

Nel tuo test jsbin è presente un comportamento errato nella versione 9.20 Build 8771 e nella versione 10.62 Build 3500. –

risposta

5

onfocus e onblur sono buggy sull'oggetto finestra in IE. L'alternativa è quella di utilizzare la moltiplicazione onfocusin e onfocusout eventi:

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; 

Ho creato un esempio per voi here.

focusIn e focusOut, a differenza attenzione e sfocatura, sono eventi che si propagano; spareranno per gli elementi nella pagina e si gonfieranno verso l'alto. Dovrai controllare lo event.srcElement o event.target se non vuoi intervenire su questo evento per tutti gli elementi sulla pagina.

Per quanto riguarda Opera, "strano" è una parola che potresti usare. La versione sul mio computer non attiva per me gli eventi di sfocatura o messa a fuoco sulla finestra. Spero che qualcun altro possa offrirti una soluzione.

+1

Grazie mille per questo. Sembra che farà bene il lavoro.Per quanto riguarda Opera: questa funzionalità è solo un po 'carina, quindi mi aspetto che rileverò window.opera e lo lascerò ad asciugare. –

+1

Se sarà solo un piccolo inconveniente fino a quando non risolviamo bug di messa a fuoco/sfocatura, suggerisco di non rilevare window.opera, ma lasciandolo solo con errori - in questo modo funzionerà automaticamente quando avremo delle correzioni;) – hallvors

+0

Sarebbe più bello. Se potessi garantire che si bloccherebbe nello stato FOCUSED, l'unica conseguenza sarebbe la mancanza di notifiche di nuovi messaggi (animazioni della barra delle applicazioni manipolando il titolo). Sono riuscito a farlo rimanere bloccato su BLURRED, il che significherebbe che le animazioni non si annullano. Potrei riuscire a scappare con un onfocus aggiuntivo della textarea in cui l'utente digita il suo messaggio ... –