我正在努力打开索引数据库。这是我的代码:
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?
答案 0 :(得分:0)
嗯,首先,在onsuccess中,db来自事件,而不是原始对象:
db = event.target.result;
您很可能在控制台中将此视为错误。
答案 1 :(得分:0)
您无需等待浏览器触发加载事件。 indexedDB准备情况与DOM准备情况无关。您只需在全局范围内调用indexedDB.open,它最终将执行。
您可能不需要检查供应商前缀的语句。通常会删除前缀。只需使用window.indexedDB并删除此语句。
您还应该监听被阻止的事件。此事件通常在同一时间在多个选项卡中打开同一页面时触发。被阻止时,其他事件不会被触发。
行db = DBOpenRequest.result
似乎将一个值(IDBDatabase对象的实例)分配给在外部作用域中定义的变量,该变量仅在函数作用域内有效。有效。这表明缺乏编写和使用异步代码的经验。在继续之前,您应该了解有关异步代码的更多信息。