【问题标题】:IndexedDB not working in FireFox and IEIndexedDB 在 FireFox 和 IE 中不起作用
【发布时间】:2012-05-06 06:38:44
【问题描述】:

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

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

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

【问题讨论】:

    标签: html internet-explorer firefox indexeddb


    【解决方案1】:

    要让 html5rocks 演示在 Firefox 上运行,您需要在数据库打开时附加 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 演示的工作版本的链接,扩展了两个新功能,用于查看详细信息数据和更新值。

    【讨论】:

      【解决方案2】:

      Chrome 落后于 IndexedDB 标准。

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

      我相信运行 HTML5Rocks.com 的主要是 Chrome 团队中的人,所以这些示例会落后是有道理的。

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

      【讨论】:

      • @JaimeOlivares:这不是重点,这是关于对最新版本规范的支持。 IDBDatabase.setVersion() 一直是 dropped from the spec。但是 html5rocks.com 上的示例仍然使用它。所以这个答案似乎是正确的。
      • Jaime,你能在 Firefox 上运行 IndexedDB 吗?
      【解决方案3】:

      Todo 列表示例是在 chrome 上实现的过时 IndexedDB 规范。现在您必须使用 onupgardedneeded 方法,并且现在也要使用 setVersion。

      【讨论】:

        【解决方案4】:

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

        2015 年编辑:IndexedDB API 从版本 10 起为 available in IE

        【讨论】:

        • 这完全不真实。 IE 一直支持 IDB 标准,实际上是它的主要支持者。他们的Interoperability Labs 可能是网上最彻底的例子。
        • 真的吗?那为什么它没有通过测试呢?他们是支持者的事实并不意味着它目前已实施。据我所知,他们计划在下一个版本的 IE 中引入它。
        • @editor,根据Microsoft HTML5 Labs,他们仍处于原型阶段。最重要的是,它没有通过Modernizr test,这是测试 HTML5 功能最常用的库。因此,请在否决我之前查看事实。
        • Websockets、File API 等都是“原型”。如果你的论点成立,那么说 IE 不支持 HTML5 是准确的,这(就像你的回答一样)也是非常不真实的。
        • 我不是这么说,请不要妄加评论。我刚才说了:IE(9)的当前版本不支持IndexedDB,这很容易证明。所有其他论点都是题外话。
        猜你喜欢
        • 1970-01-01
        • 2014-01-14
        • 2013-07-23
        • 2015-08-16
        • 2016-03-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多