JavaScript / jQuery: testa se a janela tem foco

Como você testa se o navegador tem foco?

   

Eu não testei isso em outros navegadores, mas parece funcionar no Webkit. Eu vou deixar você tentar o IE. : o)

Experimente: http://jsfiddle.net/ScKbk/

Depois de clicar para iniciar o intervalo, altere o foco da janela do navegador para ver a alteração do resultado. Mais uma vez, testado apenas no 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 + '
'); }, 1000); });​

use o método hasFocus do documento. Você pode encontrar uma descrição detalhada e um exemplo aqui: método hasFocus

EDIT: Adicionado violino http://jsfiddle.net/Msjyv/3/

HTML

 Currently without 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); 

HTML:

  

Javascript:

 $(function(){ $hasFocus = false; $('#clear').bind('click', function() { $('#event').empty(); }); $(window) .bind('focus', function(ev){ $hasFocus = true; $('#event').append('
'+(new Date()).getTime()+' focus
'); }) .bind('blur', function(ev){ $hasFocus = false; $('#event').append('
'+(new Date()).getTime()+' blur
'); }) .trigger('focus'); setInterval(function() { $('#event').append('
'+(new Date()).getTime()+' has focus '+($hasFocus ? 'yes' : 'no')+'
'); }, 1000); });​

teste

ATUALIZAR:

Vou consertar, mas o IE não funciona muito bem

atualização de teste