奇怪的default_popup行为

问题描述 投票:0回答:1

我正在开发一个使用default_popup的扩展,在清单(V3)中定义为:

"action": {
   "default_popup": "popup.html"
},
        

显示表单。每次单击扩展时,表单都会填充从对后台服务工作人员的 sendMessage() 调用的响应中收到的数据。当表单数据的任何部分发生更改时,数据会通过侦听器保存回服务工作人员。

一切看起来都很顺利。我可以单击扩展程序图标打开弹出窗口,填写表单,然后再次单击扩展程序图标关闭弹出窗口。再次单击将其重新打开,表单数据将按预期显示。

但是,如果我关闭弹出窗口并等待几分钟,然后再次单击扩展程序图标,所有表单数据都会消失。但事实并非如此。如果我再单击扩展图标两次(即一次关闭,再次打开),数据会神奇地重新出现。

现在这是奇怪的部分。如果我打开后台服务工作人员的调试控制台视图,并将其保持打开状态,则每次单击扩展程序打开弹出窗口时,表单数据都会正确显示,无论我关闭它已经过去了多长时间。这让我发疯!

我意识到我没有提供很多细节,但我非常感谢任何关于为什么在使用扩展时后台服务工作人员的调试控制台保持打开状态时一切似乎都能完美工作的想法。

google-chrome-extension chrome-extension-manifest-v3
1个回答
0
投票

当 devtools 未附加到 Service Worker 时,自上次事件(例如消息)以来,它会存在 30 秒(在 Chrome 中),因此您需要维护存储中的数据(example)或强制 Worker 在运行时运行弹出窗口已打开(示例)。

在这种情况下,更好的选择是摆脱 Service Worker(它消耗内存和 CPU)并直接在弹出窗口中使用

chrome.storage.local
来读取/保存数据。

© www.soinside.com 2019 - 2024. All rights reserved.