Google chrome 在Google Chrome 21中删除indexeddb数据库时出错

Google chrome 在Google Chrome 21中删除indexeddb数据库时出错,google-chrome,indexeddb,Google Chrome,Indexeddb,从今天起,当我试图在Google Chrome版本21中删除IndexedDB数据库时,我开始出错。 运行用于删除数据库的命令时: window.webkitIndexedDB.deleteDatabase(dbName); 触发以下事件: IDBVersionChangeEvent bubbles: false cancelBubble: false cancelable: false clipboardData: undefined currentTarget: IDBVersionCha

从今天起,当我试图在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 workers和Windows访问IndexedDB。

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

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

request = indexeddb.open("dbname");
request.onsuccess = function(event) {
  db = event.target.result;
  db.onversionchange = function(event) {
    event.target.close();
  }
}

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

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

request = indexeddb.open("dbname");
request.onsuccess = function(event) {
  db = event.target.result;
  db.onversionchange = function(event) {
    event.target.close();
  }
}

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

database.close();//closing the database
self.close();//closing the web worker
Google chrome中可能存在一些错误,如果数据库关闭需要比平时更多的时间,并且您关闭了web worker,那么当您尝试在之后删除数据库时,该数据库将被锁定


我已通过不关闭web worker并使其保持空闲模式来修复此问题。

问题在于从web worker访问数据库。在这一行代码中:

database.close();//closing the database
self.close();//closing the web worker
Google chrome中可能存在一些错误,如果数据库关闭需要比平时更多的时间,并且您关闭了web worker,那么当您尝试在之后删除数据库时,该数据库将被锁定


我已经解决了这个问题,没有关闭web worker并让它保持空闲模式。

onversionchange在我尝试删除数据库时不会启动,这可能是一个bug。如果你有一个简单的复制案例,你可以在“是”上提交。当从网络工作者那里访问数据库时,google chrome中可能有bug。我在下面发布了解决方案。这就是我问题的解决方案。我正在创建一个Chrome应用程序,我有后台脚本和前台脚本,需要从这两个脚本访问IndexedDB。我在删除时遇到了一个问题,这个问题源于前台脚本,但是添加这段代码效果非常好!在后台脚本中激发的onversionchange。谢谢当我试图删除数据库时,onversionchange不会启动,那可能是一个bug。如果你有一个简单的复制案例,你可以在“是”上提交。当从网络工作者那里访问数据库时,google chrome中可能有bug。我在下面发布了解决方案。这就是我问题的解决方案。我正在创建一个Chrome应用程序,我有后台脚本和前台脚本,需要从这两个脚本访问IndexedDB。我在删除时遇到了一个问题,这个问题源于前台脚本,但是添加这段代码效果非常好!在后台脚本中激发的onversionchange。谢谢