有什么方法可以知道浏览器中的选项卡何时被 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
,即使从用户视觉的角度来看,该选项卡是完全不可见的。
向 blur
和 focus
事件添加事件侦听器也无济于事,因为只要添加它的文档失去焦点就会触发 blur
,这对我有 window 'A' 覆盖整个屏幕的场景,但不适合我有 window 'A' 和 'B' 并排的场景。在这种情况下,'blur' 事件将在选项卡 'Y' 失去焦点时触发,即使选项卡 'Y' 在技术上对任何正在查看屏幕的人都是可见的。
我需要的结果如下所示:
- 选项卡 'Y' 位于非最小化 window 的前景中并且未被另一个 window 覆盖:
increaseCount() // regardless of whether the tab is focused or not
- 选项卡 'Y' 位于非最小化 window 的前景中,但被另一个 window 覆盖,因此其内容对任何人类观察者都是不可见的:
// don't increase count
有什么方法可以检测到吗?
不,没有可靠的方法来检测这一点。
事实上,我的理解是 Chrome 可能甚至不知道内容是否被覆盖。考虑像 Windows 这样的情况,自从 Windows Vista 和 Aero 以来,应用程序 window 总是被 window 管理器绘制和拦截。底层应用程序总是绘制到虚拟 space。其他并发症包括 windows 可能覆盖浏览器 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
,即使从用户视觉的角度来看,该选项卡是完全不可见的。
向 blur
和 focus
事件添加事件侦听器也无济于事,因为只要添加它的文档失去焦点就会触发 blur
,这对我有 window 'A' 覆盖整个屏幕的场景,但不适合我有 window 'A' 和 'B' 并排的场景。在这种情况下,'blur' 事件将在选项卡 'Y' 失去焦点时触发,即使选项卡 'Y' 在技术上对任何正在查看屏幕的人都是可见的。
我需要的结果如下所示:
- 选项卡 'Y' 位于非最小化 window 的前景中并且未被另一个 window 覆盖:
increaseCount() // regardless of whether the tab is focused or not
- 选项卡 'Y' 位于非最小化 window 的前景中,但被另一个 window 覆盖,因此其内容对任何人类观察者都是不可见的:
// don't increase count
有什么方法可以检测到吗?
不,没有可靠的方法来检测这一点。
事实上,我的理解是 Chrome 可能甚至不知道内容是否被覆盖。考虑像 Windows 这样的情况,自从 Windows Vista 和 Aero 以来,应用程序 window 总是被 window 管理器绘制和拦截。底层应用程序总是绘制到虚拟 space。其他并发症包括 windows 可能覆盖浏览器 window 但可能不会完全阻止它。在不知道内容的情况下,浏览器并不知道内容是否被覆盖。