有什么方法可以知道浏览器中的选项卡何时被 window 覆盖?

Is there any way to know when a tab in the browser is covered by a window?

TL;DR: 我正在开发一个 Chrome 扩展,只有当一个选项卡可见且未被另一个 window 覆盖时,我才需要增加计数。有什么方法可以检测到吗?


我试过使用 Page Visibility API,但问题是:

假设我有两个 windows 并排停靠。我的重点是 window 'A' 中的选项卡 'X'。但是,在旁边,我还在 window 'B'.

的前台打开了选项卡 'Y'

如果我当时检查 document.hidden 选项卡 'Y',它将解析为 false,这正是我想要的。但是,如果我然后展开 window 'A' 以覆盖全屏并在其后面打开 window 'B' 而不是最小化,document.hidden for tab 'Y' 仍然等于 false,即使从用户视觉的角度来看,该选项卡是完全不可见的。

blurfocus 事件添加事件侦听器也无济于事,因为只要添加它的文档失去焦点就会触发 blur,这对我有 window 'A' 覆盖整个屏幕的场景,但不适合我有 window 'A' 和 'B' 并排的场景。在这种情况下,'blur' 事件将在选项卡 'Y' 失去焦点时触发,即使选项卡 'Y' 在技术上对任何正在查看屏幕的人都是可见的。


我需要的结果如下所示:

  1. 选项卡 'Y' 位于非最小化 window 的前景中并且未被另一个 window 覆盖: increaseCount() // regardless of whether the tab is focused or not
  2. 选项卡 'Y' 位于非最小化 window 的前景中,但被另一个 window 覆盖,因此其内容对任何人类观察者都是不可见的: // don't increase count

有什么方法可以检测到吗?

不,没有可靠的方法来检测这一点。

事实上,我的理解是 Chrome 可能甚至不知道内容是否被覆盖。考虑像 Windows 这样的情况,自从 Windows Vista 和 Aero 以来,应用程序 window 总是被 window 管理器绘制和拦截。底层应用程序总是绘制到虚拟 space。其他并发症包括 windows 可能覆盖浏览器 window 但可能不会完全阻止它。在不知道内容的情况下,浏览器并不知道内容是否被覆盖。