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 具有空值,因此没有触发任何事件。当我在没有调试模式的情况下执行代码时,我看到成功事件被触发。有谁知道为什么会这样?

4

1 回答 1

4

onupgradeneeded 没有触发的事实是因为您已经多次运行代码并且第一次创建了具有版本一的数据库。open函数的逻辑是,如果数据库不存在则创建,如果数据库版本低于提供的版本,则升级。(请记住,indexeddb 是持久存储,这意味着如果您关闭浏览器,它不会被破坏)如果您想确保每次都输入 onupgradeneeded(用于测试 pupouses !!!)您可以在之前删除数据库再次打开/创建它。

事件为空的事实可能取决于您放置断点的位置?在其中一个回调中放置一个断点,您将看到 onsuccess、onerror、... 将在请求对象上填充。

于 2013-06-20T05:56:29.137 回答