79 votes

JavaScript / jQuery: Teste si la fenêtre a le focus

Comment testez-vous si le navigateur a le focus?

160voto

gumape Points 1233

utilisez la méthode hasFocus du document. Vous pouvez trouver une description détaillée et un exemple ici: Méthode hasFocus

EDIT: Ajouté le violon 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);
 

78voto

user113716 Points 143363

Je n'ai pas testé cela dans d'autres navigateurs, mais cela semble fonctionner avec Webkit. Je vous laisse essayer IE. : o)

Essayez-le: http://jsfiddle.net/ScKbk/

Après avoir cliqué sur le début de l'intervalle, modifiez le focus de la fenêtre du navigateur pour afficher les résultats. Encore une fois, testé uniquement dans Webkit.

 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);
});​
 

1voto

andres descalzo Points 8392

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);
});​
 

tester

METTRE À JOUR:

Je vais le réparer, mais IE ne fonctionne pas très bien

test de mise à jour

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X