在 document.hasFocus()
事件侦听器的回调上下文中,似乎 visibilitychange
总是返回 false。我知道我可以使用 document.hidden
,但我更喜欢使用 hasFocus()
,因为当它为真时它的范围更窄。
document.addEventListener('visibilitychange', function() {
console.log(document.hasFocus()) // always false
console.log(document.hidden) // "more correct"
});
我更想知道为什么会这样。是因为每当 visibilitychange
被调用时 document.hasFocus()
实际上都不是真的,因为 document
必须处于焦点但在 visibilitychange
被调用之前不会发生这种情况吗?
示例 1,我们从 tabA 切换到 tabB -> document.hasFocus()
设置为 false
,然后运行 visibilitychange
。
示例 2,我们从 tabB 切换回 tabA -> visibilitychange
运行,document.hasFocus()
仍然是假的,因为我们在技术上没有关注文档,因此它返回假?只有当我们鼠标点击文档时,document.hasFocus()
才会为真?