1

Firefox と IE の最新バージョンを使用していますが、html5rocks.comの例はこれら 2 つのブラウザーでは機能しません。Chrome でテストしたところ、問題なく動作しました。これらのブラウザーは、次のように indexedDB を開こうとしてもイベント (「onsuccess」または「onerror」) を発生させないことに注意してください。

var request = indexedDB.open("todos");

この問題のアイデア/解決策を共有してください。

4

4 に答える 4

6

html5rocks のデモを Firefox で動作させるには、データベースを作成するメソッドではonupgradeneededなく、データベースを開くときにイベントを添付する必要があります。setversionFirefox と Chrome の両方で動作するコード サンプルを次に示します。

myStorage.indexedDB.open = function() {
  var v = 1;
  var request = indexedDB.open("todos", v);

  //Firefox code for db init
  request.onupgradeneeded = function (e) {
    myStorage.indexedDB.db = e.target.result;
    var db = myStorage.indexedDB.db;
    // We can only create Object stores in a setVersion transaction;

    if(db.objectStoreNames.contains("todo")) {
        var storeReq = db.deleteObjectStore("todo");
    }

    var store = db.createObjectStore("todo",
        {keyPath: "timeStamp"});

  }

  request.onsuccess = function(e) {
    myStorage.indexedDB.db = e.target.result;
    var db = myStorage.indexedDB.db;

    //Chrome code for db init
    if (v!= db.version && db.setVersion) {
      var setVrequest = db.setVersion(v);

      // onsuccess is the only place we can create Object Stores
      setVrequest.onerror = myStorage.indexedDB.onerror;
      setVrequest.onsuccess = function(e) {
        if(db.objectStoreNames.contains("todo")) {
          db.deleteObjectStore("todo");
        }

        var store = db.createObjectStore("todo",
          {keyPath: "timeStamp"});

        myStorage.indexedDB.getAllTodoItems();
      };
    }
    else 
        myStorage.indexedDB.getAllTodoItems();
  };

  request.onerror = myStorage.indexedDB.onerror;
}

編集: これは、私がgithubで管理している html5roks ToDo デモの作業バージョンへのリンクで、詳細データを表示し、値を更新するための 2 つの新しい機能で拡張されています。

于 2012-06-15T14:28:21.313 に答える
2

Chrome は IndexedDB 標準に遅れをとっています。

12 月に新しいリビジョンが導入され、Firefox と IE がアップグレードされました。クロムはまだありません。

HTML5Rocks.com を運営しているのは主に Chrome クルーの方々だと思いますので、これらの例が遅れている理由は理にかなっています。

2010 年 12 月以前と 2010 年 12 月以降の API の間の大きな変更点は、setVersion要求の変更と新しいonupgradeneededコールバックです。

于 2012-05-06T21:44:14.393 に答える
0

IndexedDBはIEではサポートされていません。確認のためにhtml5test.comにアクセスしてください

2015年の編集:IndexedDB APIは、バージョン10以降IEで利用可能です

于 2012-05-06T13:45:49.560 に答える
0

Todo リストの例は、chrome に実装された古い IndexedDB 仕様です。ここで、onupgardedneeded メソッドを使用する必要があり、setVersion も今のところ使用する必要があります。

于 2012-09-03T15:30:24.257 に答える