IndexedDB无法在FireFox和IE中运行

时间:2012-05-06 06:38:44

标签: html5 internet-explorer firefox indexeddb

我有最新版本的Firefox和IE,但html5rocks.com中的示例在这两种浏览器中不起作用。我用Chrome测试过,它工作正常。 我注意到这些浏览器在尝试打开indexedDB时不会触发任何事件('onsuccess'或'onerror'),如下所示。

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

请分享此问题的任何想法/解决方案。

4 个答案:

答案 0 :(得分:6)

要使Firefox上的html5rocks演示工作,您需要在数据库打开时附加onupgradeneeded事件而不是setversion方法来创建数据库。 这是适用于Firefox和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演示的工作版本的链接,扩展了两个用于查看详细信息数据和更新值的新功能。

答案 1 :(得分:2)

Chrome支持IndexedDB标准。

12月推出了新版本,Firefox和IE已升级。 Chrome还没有。

我相信大多数来自Chrome工作人员的人都会运行HTML5Rocks.com,所以这些例子落后的原因是有道理的。

2010年12月之前和之后的API之间的重大变化是setVersion请求和新onupgradeneeded回调的变化。

答案 2 :(得分:0)

IE不支持IndexedDB。访问html5test.com进行验证

编辑2015:自版本10起,IndexedDB API为available in IE

答案 3 :(得分:0)

Todo list示例是在chrome上实现的过时的IndexedDB规范。现在你必须使用onupgardedneeded方法,并且现在也设置好了版本。