首页 > 解决方案 > 有什么方法可以知道浏览器中的选项卡何时被窗口覆盖?

问题描述

TL;DR:我正在开发一个 Chrome 扩展程序,只有当一个选项卡可见且未被另一个窗口覆盖时,我才需要增加计数。有没有办法检测到这一点?


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

想象一下,我有两个并排停靠的窗户。我的重点是窗口“A”中的选项卡“X”。但是,在旁边,我还在窗口“B”的前景中打开了选项卡“Y”。

如果我document.hidden当时检查选项卡“Y”,它将解析为false,这就是我想要的。但是,如果我随后扩展窗口“A”以覆盖全屏并让窗口“B”在其后面打开而不是最小化,则document.hidden选项卡“Y”仍然相等false,即使从用户视觉的角度来看,该选项卡完全无形的。

将事件侦听器添加到blurandfocus事件也无济于事,因为blur只要添加到的文档失去焦点就会触发,这适用于我的窗口“A”覆盖整个屏幕的情况,但不适合我有窗口'A'和'B'并排的场景。在这种情况下,当标签“Y”失去焦点时,“模糊”事件将被触发,即使标签“Y”在技术上对任何正在查看屏幕的人都是可见的。


我需要的结果如下所示:

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

有没有办法检测到这一点?

标签: javascripthtmlgoogle-chrome-extensionvisibilityvisibilitychange

解决方案


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

事实上,据我了解,Chrome 甚至可能不知道内容是否被覆盖。考虑像 Windows 这样的情况,从 Windows Vista 和 Aero 开始,应用程序窗口总是被窗口管理器绘制和截获。底层应用程序始终绘制到虚拟空间。其他并发症包括可能会覆盖浏览器窗口但可能不会完全阻止它的窗口。在不知道内容的情况下,浏览器并不真正知道内容是否被覆盖。


推荐阅读