1

私は Firefox 21 を使用しています。ページの読み込み時に indexedDB オブジェクト ストアの内容を表示するために、以下のコードを記述しました。

      window.indexedDB = window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB ||
                         window.msIndexedDB;    
      window.IDBTransaction = window.IDBTransaction || window.webkitIDBTransaction ||
                         window.msIDBTransaction;
      window.IDBKeyRange = window.IDBKeyRange || window.webkitIDBKeyRange ||
                         window.msIDBKeyRange;

      var request = window.indexedDB.open('mgDB', 1);
      request.onerror = function(e) {
           alert('error');
      };

      request.onupgradeneeded = function(e) {
           alert('upgradeneeded');
      };

      request.onsuccess = function(e) {
           alert('success'); 
      };

mgDB がまだ存在しないことを知っていたので、upgradeneeded イベントが発生することを期待していました。Firebug を使用してコードをデバッグすると、エラー、onsuccess、および onupgradeneeded に null 値が表示されるため、イベントは発生しませんでした。デバッグ モードを使用せずにコードを実行すると、success イベントが発生しています。なぜそれが起こるのか誰か知っていますか?

4

1 に答える 1

4

onupgradeneeded が起動しないのは、コードをすでに数回実行しており、バージョン 1 のデータベースが初めて作成されたためです。open 関数のロジックは、データベースが存在しない場合はデータベースを作成し、データベースのバージョンが提供されたバージョンよりも低い場合はアップグレードします。(indexeddb は永続的なストレージであり、ブラウザを閉じても破棄されないことに注意してください) 毎回 onupgradeneeded を入力する必要があることを確認したい場合は (pupouses をテストするため!!!)、事前にデータベースを削除できます。再度開く/作成する。

イベントが null であるという事実は、ブレークポイントを置く場所に依存している可能性がありますか? コールバックの 1 つにブレークポイントを配置すると、onsuccess、onerror、... が要求オブジェクトで満たされることがわかります。

于 2013-06-20T05:56:29.137 に答える