Wie testen Sie, ob der Browser den Fokus hat?
javascript
jquery
events
Stange
quelle
quelle
document.hasFocus()
, das einen Booleschen Wert zurückgibt. Es ist in die Spezifikation integriert, sodass es ohne jQuery ausgeführt werden kann.Antworten:
Ich habe dies nicht in anderen Browsern getestet, aber es scheint in Webkit zu funktionieren. Ich lasse Sie IE versuchen. :Ö)
Probieren Sie es aus: http://jsfiddle.net/ScKbk/
Ändern Sie nach dem Klicken zum Starten des Intervalls den Fokus des Browserfensters, um die Ergebnisänderung anzuzeigen. Wieder nur in Webkit getestet.
var window_focus; $(window).focus(function() { window_focus = true; }).blur(function() { window_focus = false; }); $(document).one('click', function() { setInterval(function() { $('body').append('has focus? ' + window_focus + '<br>'); }, 1000); });
quelle
window
Objekt. Wenn Sie also Frames verwenden würden, müssten Sie wahrscheinlich nur das Skript in jeden einfügen.window.top
Sie diese Option, um das oberste Fenster zu überprüfen.Verwenden Sie die hasFocus-Methode des Dokuments. Eine ausführliche Beschreibung und ein Beispiel finden Sie hier: hasFocus-Methode
BEARBEITEN: Geige hinzugefügt http://jsfiddle.net/Msjyv/3/
HTML
Currently <b id="status">without</b> focus...
JS
function check() { if(document.hasFocus() == lastFocusStatus) return; lastFocusStatus = !lastFocusStatus; statusEl.innerText = lastFocusStatus ? 'with' : 'without'; } window.statusEl = document.getElementById('status'); window.lastFocusStatus = document.hasFocus(); check(); setInterval(check, 200);
quelle
if(typeof document.hasFocus === 'undefined') { document.hasFocus = function () { return document.visibilityState == 'visible'; } }
Einfaches Javascript-Snippet
Ereignisbasiert:
function focuschange(fclass) { var elems=['textOut','textFocus']; for (var i=0;i<elems.length;i++) { document.getElementById(elems[i]). setAttribute('class',fclass); } } window.addEventListener("blur",function(){focuschange('havnt')}); window.addEventListener("focus",function(){focuschange('have')}); focuschange('havnt');
.have { background:#CFC; } #textOut.have:after { content:''; } .havnt { background:#FCC; } #textOut.havnt:after { content:' not'; }
<span id='textOut'>Have</span><span id='textFocus'> focus</span>
Intervallpoolbasiert:
setInterval(function() { var fclass='havnt'; if (document.hasFocus()) { fclass='have'; }; var elems=['textOut','textFocus']; for (var i=0;i<elems.length;i++) { document.getElementById(elems[i]). setAttribute('class',fclass); } },100);
#textOut.have:after { content:''; } #textOut.havnt:after { content:' not'; } .have { background:#CFC; } .havnt { background:#FCC; }
<span id='textOut'>Have</span><span id='textFocus'> focus</span>
quelle
HTML:
<button id="clear">clear log</button> <div id="event"></div>
Javascript:
$(function(){ $hasFocus = false; $('#clear').bind('click', function() { $('#event').empty(); }); $(window) .bind('focus', function(ev){ $hasFocus = true; $('#event').append('<div>'+(new Date()).getTime()+' focus</div>'); }) .bind('blur', function(ev){ $hasFocus = false; $('#event').append('<div>'+(new Date()).getTime()+' blur</div>'); }) .trigger('focus'); setInterval(function() { $('#event').append('<div>'+(new Date()).getTime()+' has focus '+($hasFocus ? 'yes' : 'no')+'</div>'); }, 1000); });
Prüfung
AKTUALISIEREN:
Ich werde es beheben, aber IE funktioniert nicht sehr gut
Test Update
quelle