DBOpenRequest事件不会触发

时间:2015-01-27 10:22:29

标签: indexeddb

我正在努力打开索引数据库。这是我的代码:

var db;

window.onload = function() {

    window.indexedDB = window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB;
    var DBOpenRequest = window.indexedDB.open("test", 1);

    DBOpenRequest.onerror = function(event) {
        console.log("DBOpenRequest.onerror");
    };

    DBOpenRequest.onsuccess = function(event) {
        console.log("DBOpenRequest.onsuccess");
        db = DBOpenRequest.result;
    };

    DBOpenRequest.onupgradeneeded = function(event) {
        console.log("DBOpenRequest.onupgradeneeded");
    };
};

但事件没有发生。所有DBOpenRequest属性都设置为null,除了readyState设置为" done"并将结果设置为IDBDatabase对象。

这里缺少什么,所以我可以通过db变量访问indexdb?

2 个答案:

答案 0 :(得分:0)

嗯,首先,在onsuccess中,db来自事件,而不是原始对象:

db = event.target.result;

您很可能在控制台中将此视为错误。

答案 1 :(得分:0)

  1. 您无需等待浏览器触发加载事件。 indexedDB准备情况与DOM准备情况无关。您只需在全局范围内调用indexedDB.open,它最终将执行。

  2. 您可能不需要检查供应商前缀的语句。通常会删除前缀。只需使用window.indexedDB并删除此语句。

  3. 您还应该监听被阻止的事件。此事件通常在同一时间在多个选项卡中打开同一页面时触发。被阻止时,其他事件不会被触发。

  4. db = DBOpenRequest.result似乎将一个值(IDBDatabase对象的实例)分配给在外部作用域中定义的变量,该变量仅在函数作用域内有效。有效。这表明缺乏编写和使用异步代码的经验。在继续之前,您应该了解有关异步代码的更多信息。