如何使用Javascript检测Chrome中何时关注标签?

fen*_*ent 70 javascript google-chrome focus

我需要知道用户当前是否正在Google Chrome中查看标签.我试图将事件模糊和焦点绑定到窗口,但只有模糊似乎正常工作.

window.addEventListener('focus', function() {
  document.title = 'focused';
});

window.addEventListener('blur', function() {
  document.title = 'not focused';
});
Run Code Online (Sandbox Code Playgroud)

焦点事件很奇怪,只是有时候.如果我切换到另一个选项卡并返回,焦点事件将不会激活.但是,如果我点击地址栏然后返回页面,它就会.或者,如果我切换到另一个程序然后返回到Chrome,则会激活该选项卡当前是否已关注.

nin*_*cko 124

2015年更新:具有可见性API的新HTML5方式(取自Blowsie的评论):

document.addEventListener('visibilitychange', function(){
    document.title = document.hidden; // change tab text for demo
})
Run Code Online (Sandbox Code Playgroud)

原始海报给出的代码(在问题中)现在有效,截至2011年:

window.addEventListener('focus', function() {
    document.title = 'focused';
});

window.addEventListener('blur', function() {
    document.title = 'not focused';
});
Run Code Online (Sandbox Code Playgroud)

编辑:几个月后,在Chrome 14中,这仍然有效,但用户必须通过点击窗口中的任意位置至少一次与页面进行交互.仅仅滚动这样做是不够的.做window.focus()也不会自动完成.如果有人知道解决方法,请提及.

  • 有关更深入的稳健答案,请参阅此处.http://forums.greensock.com/topic/9059-cross-browser-to-detect-tab-or-window-is-active-so-animations-stay-in-sync-using-html5-visibility-api/ (5认同)
  • 使用`document.visibilityState`获取当前可见性状态 (2认同)

thi*_*der 8

问题的选定答案是否有办法检测浏览器窗口当前是否处于活动状态?应该管用.它利用W3C于2011-06-02起草的Page Visibility API.