Frage JavaScript / jQuery: Test, wenn Fenster den Fokus hat


Wie testen Sie, ob der Browser den Fokus hat?


75
2017-08-13 18:36


Ursprung


Antworten:


Ich habe dies nicht in anderen Browsern getestet, aber es scheint in Webkit zu funktionieren. Ich werde dich IE ausprobieren lassen. :O)

Versuch es:  http://jsfiddle.net/ScKbk/

Nachdem Sie auf klicken, um das Intervall zu starten, ändern Sie den Fokus des Browserfensters, um die Ergebnisänderung zu sehen. Wiederum 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);
});​

74
2017-08-13 18:59



Verwenden Sie die hasFocus-Methode des Dokuments. Eine detaillierte 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);

157
2017-08-13 19:02



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

Testaktualisierung


1
2017-08-13 21:05