从今天起,当我尝试删除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: ""
其他信息:我正在从Web工作者和窗口访问IndexedDB。
答案 0 :(得分:4)
这意味着某处有一个与该数据库的开放连接。它可以位于与调用deleteDatabase的选项卡不同的选项卡中。该连接收到一个版本更改事件,通知它已经调用了deleteDatabase并且需要关闭它。
您可以在打开数据库时添加此类处理程序:
request = indexeddb.open("dbname");
request.onsuccess = function(event) {
db = event.target.result;
db.onversionchange = function(event) {
event.target.close();
}
}
答案 1 :(得分:0)
问题在于从Web工作者访问数据库。在这行代码中:
database.close();//closing the database
self.close();//closing the web worker
如果数据库关闭需要比平常更多的时间并关闭网络工作程序,那么Google Chrome中可能存在一些错误,那么当您尝试删除数据库时数据库会被锁定。
我通过不关闭Web worker并让它保持空闲模式来解决问题。