我的PWA使用IndexedDB存储数据。
现在我发布了2.0版,这需要在第三个ObjectStore中存储数据。
当PWA首次发布时,创建的IndexedDB版本为“1”,如下所示。
var db;
var request = window.indexedDB.open("database-db", 1);
// Creating ObjectStores
request.onupgradeneeded = function(event) {
var db = event.target.result;
var driverTable = db.createObjectStore("driver");
var claimTable = db.createObjectStore("claim", {
autoIncrement: "true"
});
};
对于2.0版本,我现在继续在我的“onupgradeneeded”处理程序中创建了另一个ObjectStore(语言),并像这样更改了版本,希望IndexedDB会在后台自动重新加载新版本。
var db;
var request = window.indexedDB.open("database-db", 2);
// Creating ObjectStores
request.onupgradeneeded = function(event) {
var db = event.target.result;
var languageTable = db.createObjectStore("language");
var driverTable = db.createObjectStore("driver");
var claimTable = db.createObjectStore("claim", {
autoIncrement: "true"
});
};
不幸的是,这只适用于两种情况。
1.我在桌面上的Chrome中打开PWA,删除DevTools的应用程序选项卡中的IndexedDB,然后重新加载页面。
1.我以前从未打开过该网站,因此我的浏览器中没有安装IndexedDB。
问题是,我已经有现有的用户,他们没有选择删除他们的智能手机上的IndexedDB,除了这不是一个选项,在用户体验方面。
有没有更好的方法来解决这个问题?
先谢谢你。
1条答案
按热度按时间yh2wf1be1#
是的,有更好的方法来处理这个问题。你可以做基于版本号的检查,或者只是检查东西是否存在。下面是一些简单的示例代码,检查一个商店是否存在,如果不存在,只创建一个商店。
如果要在升级时从存储中删除所有对象,则可以添加逻辑,说明如果表存在,则可以清除它。