Gibt es eine zuverlässige Möglichkeit festzustellen, ob eine Browser-Registerkarte oder ein Fenster inaktiv oder nicht im Fokus ist?

8

Ich habe einen JavaScript-Timer, der XMLHTTP-Anfragen auf einer konstanten Basis (einmal alle 10 Sekunden) macht. Ich würde gerne den Timer anhalten können, wenn das Fenster oder der Tab den Fokus verliert.

Ich bin mir der Ereignisse onFocus und onBlur auf dem Objekt window voll bewusst, aber sie werden nicht in allen Browsern zuverlässig ausgelöst. Zum Beispiel, in Safari, Registerkarten lösen die Ereignisse nicht aus .

Einfacher Code unten destilliert die Funktionalität, die ich suche:

%Vor%

Hat jemand da draußen eine Technik, um zu bestimmen, wann ein Browserfenster oder eine Registerkarte den Fokus verliert / gewinnt, der quer durch alle gängigen Browser funktioniert?

    
Jim Fiorato 31.07.2009, 02:58
quelle

5 Antworten

3

Der obige Code funktioniert in Safari v3.0.4 (WebKit 530+) gut, der Fehler wurde anscheinend behoben. Ich habe es in Google Chrome v3.0.195.27 überprüft und es hat den gleichen Safari-Bug, obwohl es eine neuere Version von WebKit hat.

    
detj 18.10.2009, 15:44
quelle
2

Es gibt eine weitere Stapelüberlauf-Frage zu diesem Thema. Sie haben das Tabbed-Browsing-Problem dort nicht angesprochen. Sie geben einen Link, der etwas ins Detail geht, aber ohne jquery zu verwenden.

Is Gibt es eine Möglichkeit zu erkennen, ob ein Browserfenster gerade nicht aktiv ist?

Ich glaube nicht, dass Fokus / Unschärfe-Ereignisse mit Tabbed Browsing in Safari funktionieren. Einige Leute haben Mausereignisse wie mouseleave / mouseenter vorgeschlagen.

Ich habe selbst einige UI-Probleme, also wenn ich etwas entdecke, werde ich hier weitermachen.

    
Mnebuerquo 31.07.2009 03:45
quelle
0
Meine früheren verzweifelten Versuche, so etwas zu finden, haben mich zu dem Schluss geführt, dass es kein solches Tier gibt.

Oh, wie gerne würde ich mich irren.

    
chaos 31.07.2009 03:00
quelle
0
%Vor%     
Akhilhh 02.07.2014 12:43
quelle
-1

Eine Sache, die Sie beachten sollten, ist, dass die Registerkarte focus / blur Ereignisse, die von Browser-Anbietern blockiert werden, möglicherweise eine Möglichkeit ist, Benutzer zu schützen. Einige Browser erlauben alert() -style Popups (und sogar, glaube ich, eine focus() -Methode), damit ein Tab den Fokus wiedererlangt. Das Blockieren der focus / blur -Ereignisse für den Tab-Wechsel könnte dem Schutz gegen beispielsweise nicht angeforderte Popups und Fenstergrößen / Positionierung / Schließung ähnlich sein.

    
eyelidlessness 31.07.2009 03:48
quelle