2

从今天开始,当我尝试在 Google Chrome 版本 21 中删除 IndexedDB 数据库时,我开始遇到错误。当我运行删除数据库的命令时:

window.webkitIndexedDB.deleteDatabase(dbName);

以下事件触发:

IDBVersionChangeEvent
bubbles: false
cancelBubble: false
cancelable: false
clipboardData: undefined
currentTarget: IDBVersionChangeReques
defaultPrevented: false
eventPhase: 2
returnValue: true
srcElement: IDBVersionChangeRequest
target: IDBVersionChangeRequest
timeStamp: 1343929274696
type: "blocked"
version: ""

附加信息:我正在从网络工作者和窗口访问 IndexedDB。

4

2 回答 2

4

这意味着在某处存在与该数据库的开放连接。它可能位于与调用 deleteDatabase 的选项卡不同的选项卡中。该连接收到一个 versionchange 事件,通知它已调用 deleteDatabase 并且它需要关闭。

您可以在打开数据库时添加这样的处理程序:

request = indexeddb.open("dbname");
request.onsuccess = function(event) {
  db = event.target.result;
  db.onversionchange = function(event) {
    event.target.close();
  }
}
于 2012-08-03T00:00:54.460 回答
0

问题在于从网络工作者访问数据库。在这行代码中:

database.close();//closing the database
self.close();//closing the web worker

如果关闭数据库需要比平时更多的时间并且您关闭了 Web Worker,那么 Google chrome 中可能存在一些错误,然后当您之后尝试删除它时数据库被锁定。

我通过不关闭网络工作者并让它保持空闲模式来解决问题。

于 2012-08-06T13:06:39.287 回答