javascript - 有什么方法可以知道浏览器中的选项卡何时被窗口覆盖?
问题描述
TL;DR:我正在开发一个 Chrome 扩展程序,只有当一个选项卡可见且未被另一个窗口覆盖时,我才需要增加计数。有没有办法检测到这一点?
我尝试过使用Page Visibility API,但它的问题是:
想象一下,我有两个并排停靠的窗户。我的重点是窗口“A”中的选项卡“X”。但是,在旁边,我还在窗口“B”的前景中打开了选项卡“Y”。
如果我document.hidden
当时检查选项卡“Y”,它将解析为false
,这就是我想要的。但是,如果我随后扩展窗口“A”以覆盖全屏并让窗口“B”在其后面打开而不是最小化,则document.hidden
选项卡“Y”仍然相等false
,即使从用户视觉的角度来看,该选项卡完全无形的。
将事件侦听器添加到blur
andfocus
事件也无济于事,因为blur
只要添加到的文档失去焦点就会触发,这适用于我的窗口“A”覆盖整个屏幕的情况,但不适合我有窗口'A'和'B'并排的场景。在这种情况下,当标签“Y”失去焦点时,“模糊”事件将被触发,即使标签“Y”在技术上对任何正在查看屏幕的人都是可见的。
我需要的结果如下所示:
- 选项卡“Y”位于非最小化窗口的前景并且未被另一个窗口覆盖:
increaseCount() // regardless of whether the tab is focused or not
- 选项卡“Y”位于非最小化窗口的前景但被另一个窗口覆盖,因此任何人类观察者都看不到其内容:
// don't increase count
有没有办法检测到这一点?
解决方案
不,没有可靠的方法来检测这一点。
事实上,据我了解,Chrome 甚至可能不知道内容是否被覆盖。考虑像 Windows 这样的情况,从 Windows Vista 和 Aero 开始,应用程序窗口总是被窗口管理器绘制和截获。底层应用程序始终绘制到虚拟空间。其他并发症包括可能会覆盖浏览器窗口但可能不会完全阻止它的窗口。在不知道内容的情况下,浏览器并不真正知道内容是否被覆盖。
推荐阅读
- sql - 联接表而不丢失数据
- reactjs - react pdf multi lines 将所有行放在一行中
- tracking - Edge (chromium) 浏览器跟踪预防:如何在非 html 类内容(即 PDF)下正确强制加载网站图标?(再次访问时)
- java - 设置 logback 配置以按时间戳创建单独的文件夹,并为文件夹中的每个测试用例创建单独的日志文件
- javascript - 合并对象 Ramda
- ios - Swift:关闭所有视图控制器,然后呈现一个视图控制器
- excel - 如何在 Controller 中获取计算以结合 Maatwebsite\Excel ExportFromView 查看
- html - 错误 DOMException:无法在“元素”上执行“setAttribute”:“novalidate(ngSubmit)”不是有效的属性名称
- javascript - 如何根据元素的 z-Index 值将类应用于元素?(使用JavaScript)
- pandas - 如何使用 python 检索 6 个多月前的 last_transaction 数据?