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: ""

追加情報:WebワーカーとウィンドウからIndexedDBにアクセスしています。

4

2 に答える 2

4

これは、そのデータベースへのオープンな接続がどこかにあることを意味します。deleteDatabaseを呼び出しているタブとは別のタブにある可能性があります。その接続は、deleteDatabaseの呼び出しが行われ、閉じる必要があることを通知するversionchangeイベントを受信しました。

データベースを開いたときに、このようなハンドラーを追加できます。

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

問題は、Webワーカーからデータベースにアクセスすることでした。このコード行では:

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

データベースを閉じるのに通常よりも時間がかかり、Webワーカーを閉じると、後でデータベースを削除しようとするとデータベースがロックされる場合、GoogleChromeにバグがある可能性があります。

Webワーカーを閉じず、アイドルモードのままにしておくことで、問題を修正しました。

于 2012-08-06T13:06:39.287 に答える