5

Beachten Sie, dass diese und auf ein Fenster verschwimmen Ereignisse konzentrieren bezieht, nicht auf Formularfelder.window.onfocus Brennen nicht in IE7, inkonsistent in Opera

ich ein Dokument in einem Pop-up-Fenster geladen, und es enthält den folgenden Code:

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

Diese Funktionen sind zeitlich begrenzt, zum Testen. Ich hatte gehofft, diese Ereignisse benutzen zu können, um eine Flagge zu setzen, die den Fensterzustand anzeigt; Ich mache eine Chat-App, und wenn Nachrichten eingehen, wenn sie minimiert ist, werde ich etwas Aufmerksamkeit darauf richten, um Titeländerungen zu erhalten. Wenn sie jedoch nicht abbrechen, wenn das Fenster scharf wird, sind sie nur nervig.

Onload, habe ich auch Fokus in eine Textarea. (Nicht sicher, ob das einen Unterschied macht.)

IE7 (ich habe keine andere Version handlich) scheint die window.onblur zu erkennen, aber nicht die window.onfocus. Opera 10 ist einfach seltsam.

Hier ist, was in den Browsern passiert ich habe. Ich starte die Popup-Fenster in den übergeordneten auf dem Link, indem Sie auf, geht dann durch Zyklen mehr minimieren-Wiederherstellung durch den Popup der Taste auf der (Windows XP) Taskleiste klicken:

Safari 4:

  • Fenster öffnen: öffnet Dokument mit Originaltitel
  • minimieren: Titel Änderungen "verschmiert" auf
  • Restore: Titel ändert sich auf "focused"

Das ist, was ich geschehen erwartet.

Firefox 3.5:

  • Fenster öffnen: Dokument öffnet mit Originaltitel, wechselt dann auf "focused"
  • minimieren: Titel Änderungen an "verschmiert"
  • Restore: Titel ändert sich auf " FOKUSSIERTE "

Die onfocus onload ist eine kleine Überraschung, aber kein Problem.

IE7:

  • Fenster öffnen: Dokument öffnet mit Originaltitel
  • minimieren: Titel Änderungen "verschmiert" auf
  • Restore: Titel ändert sich nicht, egal wie oft ich wechseln

Was onfocus passiert?

Opera 10.5

  • Fenster öffnen: Dokument öffnet mit Originaltitel, aber in einem anderen Register, nicht Pop-up

Manchmal ...

  • minimieren: Titel Änderungen an "verschmiert"
  • Restore: Titel ändert sich auf "focused"

Manchmal ...

  • minimieren: Titel ändert sich auf "verschmiert", dann "focused"
  • Restore: Titel nicht

Okay, nicht ändert, dann ist dies einfach nur seltsam ...

ich bin zu anderen Ansätzen offen, aber ich möchte wirklich verstehen, was hier vor sich geht, in plain old Javascript - so bitte eine jQuery Antwort nicht geben, es sei denn, es gibt wirklich keinen anderen Weg, um dieses ist.

Danke!

+1

Was event.target ist, wenn die Opera Tab minimiert wird und der Titel ändert sich nach wie vor auf ‚fokussiert‘? – hallvors

+1

versucht, dies: http://jsbin.com/omeye3 und es scheint für mich OK zu arbeiten (einige Opera 10.70 Vorschau build). Könnten Sie eine kleine Demo erstellen, die das Problem für Sie zeigt? – hallvors

+0

Falsches Verhalten auf Ihrem jsbin Test in Version 9.20 Build-8771 und Version 10.62 Bauen 3500. –

Antwort

5

onfocus und onblur sind Buggy auf dem Fensterobjekt im Internet Explorer. Die Alternative ist, die Vermehrungs onfocusin und onfocusout Ereignisse zu verwenden:

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; 

Ich habe ein Beispiel für Sie here einrichten.

focusin und focusout, im Gegensatz zu Fokus und Unschärfe, sind ausbreitende Ereignisse; Sie feuern für Elemente in der Seite und sprudeln nach oben. Sie müssen die event.srcElement oder event.target überprüfen, ob Sie für alle Elemente auf der Seite nicht auf dieses Ereignis handeln wollen.

Wie für Oper, „seltsam“ ist ein Wort, das Sie nutzen könnten. Die Version auf meinem Computer wird nicht die Unschärfe oder Fokus Ereignisse auf dem Fenster für mich auslösen. Hoffentlich kann Ihnen jemand anderes eine Lösung dafür anbieten.

+1

Vielen Dank dafür. Es sieht so aus, als würde es den Job gut machen.Was Opera angeht: Diese Funktionalität ist nur eine feine Sache, also erwarte ich window.opera und lasse sie zum Trocknen liegen. –

+1

Wenn es nur ein kleines Ärgernis sein wird, bis wir Fokus-/Unschärfefehler beheben, schlage ich vor, window.opera nicht zu entdecken, sondern es einfach buggy zu lassen - so wird es automatisch funktionieren, wenn wir Fehler beheben;) – hallvors

+0

Das wäre schöner. Wenn ich garantieren könnte, dass es im FOCUSED-Zustand hängen bleibt, würde die einzige Konsequenz ein Mangel an neuen Nachrichtenbenachrichtigungen (Taskbar-Animationen durch Manipulieren des Titels) sein. Ich habe es geschafft, es auf BLURRED hängen zu lassen, was bedeuten würde, dass die Animationen nicht abgebrochen würden. Ich könnte vielleicht mit einem zusätzlichen Abbruch auf den Fokus des Textfelds, wo der Benutzer seine Nachricht eingibt, wegkommen ... –