Indexeddb AbortError

时间:2013-06-28 03:30:29

标签: javascript indexeddb

下面是我打开indexedDB的Javascript代码。我之前已经在Firefox 21中成功测试了几次代码,但现在我看到e.target.error.name中的indexedDB.open()函数返回了一个AbortError。

var openDB = function(dbCallBack) {
  var openDB = function(dbCallBack) {
    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;

    request = window.indexedDB.open('mgDB');
    request.onerror = function(e) {
      alert('Error: ' + e.target.error.name + ': Failed to open the database');
      dbCallBack(false, false);
    };

    request.onupgradeneeded = function(e) {
      dbCallBack(true, false);
    };

    request.onsuccess = function(e) {
      db = e.target.result;
      if (db.objectStoreNames.length == 0) { 
        dbCallBack(true, true);
      } else {
        dbCallBack(true, false);
      }
    };
  };
};

以下是openDB()函数的调用方式。 dbCallBack函数的代码如下所示:

if (!db) {
    var dbOpenSuccess;
    openDB(function(dbOpenSuccess, emptyTableMsg) {
      if (emptyTableMsg) {
        displayEmptyTableMsg();
      } else if (dbOpenSuccess) {
        displayTableContents();         
      }
    }); 
}

注意:在重新运行测试之前,我已尝试清除浏览器缓存并从文件夹C:\ users {userID} \ AppData \ Roaming \ Mozilla \ Firefox \ Profiles中手动删除indexedDB。我在http://nparashuram.com/IndexedDB成功运行了相同的代码。可能有什么不对?

1 个答案:

答案 0 :(得分:0)

如果您收听onabort事件,您的代码就可以了,如下所示。

request.onsuccess = function(e) {
  db = e.target.result;
  db.onabort = function(e) {
    db.close();
    db = null;
  }
  if (db.objectStoreNames.length == 0) { 
    dbCallBack(true, true);
  } else {
    dbCallBack(true, false);
  }
};