【发布时间】:2021-07-24 22:56:46
【问题描述】:
我正在开发一个大量使用 IndexedDB 的 Chrome 扩展程序。我目前正在将工作从使用清单版本 2 (MV2) 迁移到清单版本 3 (MV3)。
在 MV2 中,后台页面通过 window.indexedDB 访问 IndexedDB,这一切正常,我可以通过打开后台页面的 Chrome DevTools 来查看 IndexedDB 数据,然后导航到应用程序 > 存储 > IndexedDB。
在MV3中,后台页面需要迁移到对应的Service Worker。服务工作者使用self.indexedDB(因为window 不可用),它似乎工作正常(即,写入和读取数据库似乎工作正常)。但是,当我打开服务工作者的 DevTools(从 chrome://extensions/ 并单击有问题的扩展的“检查视图:服务工作者”)时,即使在控制之后,也看不到 IndexedDB 下的数据-点击 IndexedDB 并选择“刷新 IndexedDB”。
localStorage 似乎也存在同样的问题。本地存储的 DevTools 中没有显示任何内容,即使我可以在服务工作人员中成功执行以下操作:
chrome.storage.local.set({"a_key": "some_value"}, function() {
console.log('setting the key-value pair');
});
setTimeout(checkMyValue, 1000);
function checkMyValue()
{
chrome.storage.local.get(["a_key"], function(result) {
console.log('The value is ' + result["a_key"]);
});
}
将some_value 打印到控制台。
所以基本上,我想我要问的是:为什么 DevTools 不为我的 MV3 Chrome 扩展程序显示 Service Worker 的 IndexedDB 或 localStorage 数据?
(Chrome 版本是 90.0.4430.93(官方构建)(x86_64)。这是在 macOS Big Sur 上,如果这有什么不同的话......)
【问题讨论】:
-
我正在研究我正在构建的扩展的存储选项。出于好奇stackoverflow.com/users/4432991/byb,IndexedDB 是如何为您工作的?即使服务人员处于非活动状态,IndexedDB 中的数据也会保留?还是你必须重新填充?只是检查它是否与 chrome.storage 在后台生命周期中持续存在的意义上相同。我将在下一个或两个 sprint 中进行试验
-
@howdy_miguel IndexedDB 数据即使在服务工作者处于非活动状态时也会保留,并且在开发时,即使在重新加载扩展时也是如此。所以这很好。但也有一些问题可能与您相关,也可能与您无关,例如:stackoverflow.com/questions/66618136/… 和 stackoverflow.com/questions/67406579/… 和 stackoverflow.com/questions/67555309/…
标签: google-chrome-extension google-chrome-devtools service-worker indexeddb