检查IndexedDB数据库是否存在

时间:2014-05-20 07:04:03

标签: html5 indexeddb

首先,我从这个链接Check if IndexedDB database exists开始,我遇到了问题。

场景:

需要检查indexedDB数据库是否存在 - 如果不是退出。

第一个问题:如果不存在,indexedDB.open()会创建一个新的数据库。我试图从onupgradeneeded

中止交易
request.onupgradeneeded = function (e){
  e.target.transaction.abort();
  dbExists = false;
}

但后来我收到了错误:

  

InvalidStateError:无法执行' abort'在' IDBTransaction':交易已经完成。

我还尝试使用deleteDatabase()删除数据库,但它不起作用。 哪种方法最好?

1 个答案:

答案 0 :(得分:3)

你偶然发现了我个人认为是IDB规范中的错误。没有办法判断数据库是否存在!

在实践中实现此目的的方法仅仅是打开要检查存在的数据库。如果您获得成功附加到open_ctx.event.target.result的数据库,则它存在 - 否则它不存在(可能,根据您的错误消息,它可能正在经历versionchange或某事)。

对于它的价值,Chrome开发人员Joshua Bell似乎也认识到了这个缺点。他暴露了超出规范的webkitGetDatabaseNames()方法,该方法返回类似于索引和存储等价物的数据库名称列表。