Wie testen Sie, ob der Browser den Fokus hat?
document.hasFocus()
, das einen Booleschen Wert zurückgibt. Es ist in die Spezifikation integriert, sodass es ohne jQuery ausgeführt werden kann.
Wie testen Sie, ob der Browser den Fokus hat?
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);
});
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);
if(typeof document.hasFocus === 'undefined') { document.hasFocus = function () { return document.visibilityState == 'visible'; } }
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>
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>
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);
});
AKTUALISIEREN:
Ich werde es beheben, aber IE funktioniert nicht sehr gut