背景:我开发了一个 chrome 扩展。在后台脚本中,我存储通知数组和通知添加/删除逻辑。在后台脚本中,我添加了chrome.runtime.onConnect.addListener
. 在索引脚本中,我使用了 React,并chrome.runtime.connect
在加载 React 应用程序后添加了连接到后台脚本。我的 chrome 扩展允许打开尽可能多的扩展实例(这意味着带有一个选项卡的不同 chrome 窗口)。因此,当我添加新通知时,我还应该通知所有打开的 chrome 扩展实例。我使用调用postMessage
方法的循环向所有索引脚本发送消息。在索引端,我使用react-toastify显示一个新通知npm 包。因此,当我的 PC/Mac 具有通常的活动状态时,一切正常。重要的一点是通知可以在 PC/Mac 睡眠模式下发送。
第一个问题是,当我的 PC/Mac 长时间处于睡眠模式(即从晚上到早上)时,chrome 消息在睡眠模式下成功传递(我在控制台中检查了索引脚本日志)但通知不是出于未知原因显示。我猜在睡眠模式下,Chrome 浏览器和 JavaScript 的工作方式略有不同。我猜一些 JavaScript API 或浏览器 API 被冻结了。
第二个问题并不总是发生,但有时会发生,我在上周第一次注意到它,当时我今天早上在我的 Windows 笔记本电脑上进行了测试(我在 Mac 上没有注意到它)。所以我使用chrome.idle API,它检测 PC/Mac 何时进入待机状态(“锁定”机器状态)以及何时唤醒(“活动”机器状态)。直到今天一切正常。但是今天当我早上从睡眠中唤醒我的 Windows 笔记本电脑时(我昨晚让它进入睡眠状态),我注意到在日志中“锁定”的机器状态在早上被写入变量(当我唤醒我的笔记本电脑时)。这很奇怪。我猜那个听众 chrome.idle.onStateChanged.addListener(listener)
在笔记本电脑进入睡眠状态后就僵住了。
所以我有几个问题要了解发生了什么:
- 当 PC/Mac 进入睡眠状态时 JavaScript API 如何工作?
- PC/Mac 进入睡眠状态时浏览器 API 如何工作?(setTimeout、setInterval、事件监听器等)
- (对于 chrome 扩展开发人员)我可以通过chrome.power API获得“系统”级别设置的帮助吗?
- 也许您知道我在哪里可以看到睡眠模式如何影响浏览器性能:在 Windows 设备上、在 Mac 上等?
- PC/Mac 可以有不同的睡眠模式,对浏览器和 JavaScript 执行有不同的影响吗?
比你提前很多!
PS 因为我开发了 chrome 扩展,所以只能考虑 Chrome 浏览器。
PSS 我正在 PC 和 Mac 上测试我的 chrome 扩展(我有 Windows 笔记本电脑和 iMac)。出于某种原因,我从控制台日志中注意到,在睡眠模式下,Mac 上的活动要多得多。经常发生的情况是,在 Windows 笔记本电脑上,我只有在长时间待机后唤醒它时才能看到控制台日志(我通过检查日志时间注意到它)。