Ich muss wissen, ob der Nutzer gerade einen Tab in Google Chrome anzeigt oder nicht. Ich habe versucht, die an das Fenster gebundene Ereignisunschärfe und den Fokus zu verwenden, aber nur die Unschärfe scheint korrekt zu funktionieren.
window.addEventListener('focus', function() {
document.title = 'focused';
});
window.addEventListener('blur', function() {
document.title = 'not focused';
});
Das Fokusereignis funktioniert nur manchmal seltsam. Wenn ich zu einer anderen Registerkarte und zurück wechsle, wird das Fokusereignis nicht aktiviert. Aber wenn ich auf die Adressleiste und dann wieder auf die Seite klicke, wird es. Wenn ich zu einem anderen Programm und dann zurück zu Chrome wechsle, wird es aktiviert, wenn die Registerkarte derzeit fokussiert ist.
docment
anstelle von anzuhängenwindow
?window.focus
Aktion ist in Chrome deaktiviert (oder zumindest fehlerhaft). Weitere Informationen finden Sie hier und hier .Antworten:
Update 2015: Der neue HTML5-Weg mit Sichtbarkeits-API (entnommen aus Blowsies Kommentar):
document.addEventListener('visibilitychange', function(){ document.title = document.hidden; // change tab text for demo })
Der Code, den das Originalplakat (in der Frage) enthält, funktioniert ab 2011:
window.addEventListener('focus', function() { document.title = 'focused'; }); window.addEventListener('blur', function() { document.title = 'not focused'; });
Bearbeiten : Ab einigen Monaten in Chrome 14 funktioniert dies immer noch, aber der Benutzer muss mit der Seite interagiert haben, indem er mindestens einmal auf eine beliebige Stelle im Fenster geklickt hat. Das bloße Scrollen und dergleichen reicht nicht aus, damit dies funktioniert. Dadurch
window.focus()
funktioniert dies auch nicht automatisch. Wenn jemand eine Problemumgehung kennt, erwähnen Sie diese bitte.quelle
document.visibilityState
, um den aktuellen Sichtbarkeitsstatus zu erhaltenDie ausgewählte Antwort auf die Frage Gibt es eine Möglichkeit zu erkennen, ob ein Browserfenster derzeit nicht aktiv ist? sollte arbeiten. Es verwendet die vom W3C am 02.06.2011 erstellte API für die Sichtbarkeit von Seiten.
quelle
Es könnte doch funktionieren, ich wurde neugierig und schrieb diesen Code:
... setInterval ( updateSize, 500 ); function updateSize(){ if(window.outerHeight == window.innerHeight){ document.title = 'not focused'; } else { document.title = 'focused'; } document.getElementById("arthur").innerHTML = window.outerHeight + " - " + window.innerHeight; } ... <div id="arthur"> dent </div>
Dieser Code macht genau das, was Sie wollen, aber auf hässliche Weise. Die Sache ist, Chrome scheint die Titeländerung von Zeit zu Zeit zu ignorieren (wenn Sie zum Tab wechseln und die Maus 1 Sekunde lang gedrückt halten, scheint dies immer zu bewirken).
Sie erhalten unterschiedliche Werte auf Ihrem Bildschirm, Ihr Titel ändert sich jedoch nicht.
Fazit: Was auch immer Sie tun, vertrauen Sie dem Ergebnis beim Testen nicht!
quelle
Für alle, die Seitentitel bei Unschärfe austauschen und dann im Fokus zum ursprünglichen Seitentitel zurückkehren möchten:
// Swapping page titles on blur var originalPageTitle = document.title; window.addEventListener('blur', function(){ document.title = 'Don\'t forget to read this...'; }); window.addEventListener('focus', function(){ document.title = originalPageTitle; });
quelle
Ich fand heraus, dass das Hinzufügen von onblur = und onfocus = Ereignissen zu Inline das Problem umging:
quelle
Dies könnte mit JQuery funktionieren
$(function() { $(window).focus(function() { console.log('Focus'); }); $(window).blur(function() { console.log('Blur'); }); });
quelle
console.log('Blur');
wird in einigen Situationen NICHT aufgerufen.In Chrome können Sie ein Hintergrundskript mit einer Zeitüberschreitung von weniger als 1 Sekunde ausführen. Wenn die Registerkarte keinen Fokus hat, wird Chrome nur jede Sekunde ausgeführt. Beispiel;
Dies funktioniert nicht in Firefox oder Opera. Ich weiß nichts über andere Browser, aber ich bezweifle, dass es auch dort funktioniert.
var currentDate = new Date(); var a = currentDate.getTime(); function test() { var currentDate = new Date(); var b = currentDate.getTime(); var c = b - a; if (c > 900) { //Tab does not have focus. } else { //It does } a = b; setTimeout("test()",800); } setTimeout("test()",1);
quelle
setTimeout(test, 800)
. Wenn Sie ihm eine Zeichenfolge geben, wirdeval()
es, was viel viel langsamer ist.