怎样检测浏览器窗口是否处于焦点状态?

7

当窗口处于后台时,我的页面应该只播放通知声音。我可以跟踪 window.onfocuswindow.onblur 事件来注意焦点状态的变化。然而,我不知道窗口是否会加载焦点,因为它可能在后台标签中加载。

在收到 onfocus/onblur 事件之前,如何决定是否播放声音?

2个回答

2

你能不能假设它是模糊加载的,然后在收到任何类型的事件(keydown/mousemove)时立即将状态更改为聚焦?


这是个好主意。虽然不是完美的解决方案,但可能是最好的可行方案。 - Peeja
2
即使您在模糊的窗口上移动鼠标,也会触发 mousemove 事件,请改用 mousedown 事件。在此处尝试:http://www.quirksmode.org/dom/events/tests/mousemove.html - Ali Shakiba

0

当页面最初打开(在前台)时,应触发onfocus事件。至少在FF3/IE8中是这样的。

因此,您可以在初始状态下启用声音,当触发onfocus时将其关闭,并在触发onblur时重新启用它们。


即使有人在关闭“切换到新标签页”偏好设置的情况下进行了打开新标签页的操作,这个功能是否仍然可用?(并非说它不可用,只是想知道而已。 :)) - chaos
对我来说,当我在后台打开一个新标签页时,onfocus事件不会被触发。一旦我切换到该标签页,它就会被触发。所以如果你开始时打开声音,那应该可以正常工作,对吧?如果标签页在前台打开,声音将会开启,但是onfocus事件会立即关闭它们。如果标签页在后台打开,声音会一直保持开启,直到你切换到该标签页。 - Patrick McElhaney
我在FF3中看到了这个问题,但在Safari中没有。在Safari中,只有在窗口从后台获得焦点后,才会触发onfocus事件。 - Peeja

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接