我正在开发一个大量使用 IndexedDB 的 Chrome 扩展。我目前正在将工作从使用 list 版本 2 (MV2) 迁移到 list 版本 3 (MV3)。
在 MV2 中,后台页面通过 window.indexedDB
访问 IndexedDB,并且工作正常,我可以通过打开后台页面的 Chrome DevTools 来查看 IndexedDB 数据,然后导航到应用程序> 存储 > IndexedDB。
在MV3中,后台页面需要迁移到相应的Service Worker。服务 worker 使用 self.indexedDB (因为 window
不可用),并且它似乎工作正常(即写入数据库和从数据库读取似乎工作正常) 。但是,当我打开 Service Worker 的 DevTools(从 chrome://extensions/并单击相关扩展的“检查 View :Service Worker”)时,即使在控制之后,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 上,如果这有什么区别的话......)
最佳答案
我在 https://crbug.com/1204851 中提交了实现它的功能请求这样您就可以点击星号来提高报告的重要性并收到进展通知。
当前的解决方法是在扩展程序的任何 UI 页面上打开开发工具:
- 弹出窗口/选项 - 只需在页面内右键单击并选择“检查”
- 通过其 chrome-extension://URL 打开的带有扩展程序文件的任何选项卡,例如您可以手动复制粘贴类似
chrome-extension://**id**/manifest.json
的 URL,其中**id**
是您的扩展程序的 ID启用右上角的“开发者模式”开关后可以在 chrome://extensions 页面中看到。
请注意localStorage与 chrome.storage 无关,这是完全不同的事情。
请参阅how to inspect extension's chrome.storage in devtools .
关于google-chrome-extension - 如何在 Chrome DevTools 中查看/编辑 localStorage 和 IndexedDB 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67353529/