Existe uma maneira confiável entre navegadores para detectar que uma guia está em foco.
O cenário é que temos um aplicativo que pesquisa regularmente os preços das ações e, se a página não tiver foco, poderíamos interromper a pesquisa e poupar a todos o ruído do tráfego, principalmente porque as pessoas são fãs de abrir várias guias com portfólios diferentes.
É window.onblur
e window.onfocus
uma opção para isso?
javascript
optimization
polling
Fenton
fonte
fonte
Respostas:
Sim
window.onfocus
ewindow.onblur
deve funcionar para o seu cenário:http://www.thefutureoftheweb.com/blog/detect-browser-window-focus
fonte
onfocus
é crossbrowser, onde os eventos que você mencionou são IE-only, eu não posso ver porque isso seria considerado uma boa nota por você ..Edição importante: esta resposta está desatualizada. Desde sua criação, a API Visibility ( mdn , exemplo , spec ) foi introduzida. É a melhor maneira de resolver esse problema.
AFAIK,
focus
eblur
todos são suportados em ... tudo. (consulte http://www.quirksmode.org/dom/events/index.html )fonte
Ao pesquisar sobre esse problema, encontrei uma recomendação de que a API de visibilidade de página deveria ser usada. A maioria dos navegadores modernos suporta essa API de acordo com Can I Use: http://caniuse.com/#feat=pagevisibility .
Aqui está um exemplo de trabalho (derivado deste snippet ):
Atualização: o exemplo acima costumava ter propriedades com prefixo para os navegadores Gecko e WebKit, mas eu removi essa implementação porque esses navegadores oferecem a API de visibilidade de página sem um prefixo há algum tempo. Mantive o prefixo específico da Microsoft para permanecer compatível com o IE10.
fonte
Surpreendente ver ninguém mencionado
document.hasFocus
MDN tem mais informações.
fonte
Sim, esses devem funcionar para você. Você acabou de me lembrar desse link que me deparei que explora essas técnicas. leitura interessante
fonte
Eu faria dessa maneira (Referência http://www.w3.org/TR/page-visibility/ ):
fonte
Divertido e fácil de usar!
O plug-in a seguir fará seu teste padrão para várias versões do IE, Chrome, Firefox, Safari, etc. e estabelecerá os métodos declarados de acordo. Também lida com questões como:
O uso é tão simples quanto: Role para baixo até ' Executar snippet '
fonte
jQuery(window).blur/focus
, que era indesejável por muitos, portanto, uma das razões pelas quais fiz esse plugin. O plug-in foi criado para ajudar a fornecer o que o jQuery ainda não