IndexedDB.open 未在 Chrome 上调用回调
IndexedDB.open callbacks not called on Chrome
我正在尝试使用 IndexedDB,并且一切正常,直到几个小时前我的 .open() 回调停止在 Chrome 上被调用(在 Safari 上测试并且工作正常)。
RT.prototype.setupIndexedDB = function (callback) {
var dbName = "test";
var dbVersion = 1;
var indexedDB = window.indexedDB ||
window.webkitIndexedDB ||
window.mozIndexedDB;
console.log("setup indexed db");
var request = indexedDB.open(dbName, dbVersion);
request.onsuccess = function(e) {
console.log("db request success");
};
request.onblocked = function(e) {
console.log("DB open blocked", e);
};
request.onerror = function(err) {
console.log("error", err);
};
request.onversionchange = function(err) {
console.log("onversionchange", err);
};
request.onupgradeneeded = function(e) {
console.log("upgrade needed");
};
};
我查看了 Chrome 开发人员工具 IndexedDB,但什么也没有...
有人知道发生了什么事吗?
谢谢
编辑:完全重启浏览器就成功了,但我仍然很想知道发生了什么。
您是否正在尝试同时删除数据库?如果存在阻塞的挂起的 deleteDatabase 操作,IndexedDB 可能会进入一个奇怪的(尽管根据规范是正确的)状态。例如。下面的代码。如果一切都失败了,你可以检查 chrome://indexeddb-internals,它会告诉你是否有任何待处理的打开或删除操作正在搞砸。
var request = indexedDB.open("test", 1);
request.onblocked = function(e) {
console.log("DB open blocked", e);
};
request.onerror = function(err) {
console.log("DB open error", err);
};
request.onupgradeneeded = function(e) {
console.log("DB open upgrade needed");
};
request.onsuccess = function(e) {
db = request.result;
console.log("DB open success");
db.onversionchange = function(e) {
console.log("DB got a versionchange event")
}
request = indexedDB.deleteDatabase("test");
request.onsuccess = function(e) {
console.log("delete success will not be called")
}
request.onblocked = function(e) {
console.log("delete was blocked");
request = indexedDB.open("test", 1);
request.onsuccess = function(e) {
console.log("success won't be called");
};
request.onblocked = function(e) {
console.log("blocked won't be called", e);
};
request.onerror = function(err) {
console.log("error won't be called", err);
};
request.onupgradeneeded = function(e) {
console.log("upgradeneeded won't be called");
};
};
};
我正在尝试使用 IndexedDB,并且一切正常,直到几个小时前我的 .open() 回调停止在 Chrome 上被调用(在 Safari 上测试并且工作正常)。
RT.prototype.setupIndexedDB = function (callback) {
var dbName = "test";
var dbVersion = 1;
var indexedDB = window.indexedDB ||
window.webkitIndexedDB ||
window.mozIndexedDB;
console.log("setup indexed db");
var request = indexedDB.open(dbName, dbVersion);
request.onsuccess = function(e) {
console.log("db request success");
};
request.onblocked = function(e) {
console.log("DB open blocked", e);
};
request.onerror = function(err) {
console.log("error", err);
};
request.onversionchange = function(err) {
console.log("onversionchange", err);
};
request.onupgradeneeded = function(e) {
console.log("upgrade needed");
};
};
我查看了 Chrome 开发人员工具 IndexedDB,但什么也没有...
有人知道发生了什么事吗?
谢谢
编辑:完全重启浏览器就成功了,但我仍然很想知道发生了什么。
您是否正在尝试同时删除数据库?如果存在阻塞的挂起的 deleteDatabase 操作,IndexedDB 可能会进入一个奇怪的(尽管根据规范是正确的)状态。例如。下面的代码。如果一切都失败了,你可以检查 chrome://indexeddb-internals,它会告诉你是否有任何待处理的打开或删除操作正在搞砸。
var request = indexedDB.open("test", 1);
request.onblocked = function(e) {
console.log("DB open blocked", e);
};
request.onerror = function(err) {
console.log("DB open error", err);
};
request.onupgradeneeded = function(e) {
console.log("DB open upgrade needed");
};
request.onsuccess = function(e) {
db = request.result;
console.log("DB open success");
db.onversionchange = function(e) {
console.log("DB got a versionchange event")
}
request = indexedDB.deleteDatabase("test");
request.onsuccess = function(e) {
console.log("delete success will not be called")
}
request.onblocked = function(e) {
console.log("delete was blocked");
request = indexedDB.open("test", 1);
request.onsuccess = function(e) {
console.log("success won't be called");
};
request.onblocked = function(e) {
console.log("blocked won't be called", e);
};
request.onerror = function(err) {
console.log("error won't be called", err);
};
request.onupgradeneeded = function(e) {
console.log("upgradeneeded won't be called");
};
};
};