首先,我从这个链接Check if IndexedDB database exists开始,我遇到了问题。
场景:
需要检查indexedDB数据库是否存在 - 如果不是退出。
第一个问题:如果不存在,indexedDB.open()
会创建一个新的数据库。我试图从onupgradeneeded
request.onupgradeneeded = function (e){
e.target.transaction.abort();
dbExists = false;
}
但后来我收到了错误:
InvalidStateError:无法执行' abort'在' IDBTransaction':交易已经完成。
我还尝试使用deleteDatabase()
删除数据库,但它不起作用。
哪种方法最好?
答案 0 :(得分:3)
你偶然发现了我个人认为是IDB规范中的错误。没有办法判断数据库是否存在!
在实践中实现此目的的方法仅仅是打开要检查存在的数据库。如果您获得成功附加到open_ctx.event.target.result
的数据库,则它存在 - 否则它不存在(可能,根据您的错误消息,它可能正在经历versionchange
或某事)。
对于它的价值,Chrome开发人员Joshua Bell似乎也认识到了这个缺点。他暴露了超出规范的webkitGetDatabaseNames()
方法,该方法返回类似于索引和存储等价物的数据库名称列表。