我试图通过使用setVersion获取以下代码来处理chrom(因为onupgradeneeded尚不可用)。
IDBVersionChangeRequest填充了IDBDatabaseException。并且无法调用onsuccess函数。我需要在onsuccess函数中创建一个ObjectStore。
特别是这一行: request = browserDatabase._db.setVersion(browserDatabase._dbVersion.toString());
以下是我的代码。任何帮助将不胜感激......
browserDatabase._db = null;
browserDatabase._dbVersion = 4;
browserDatabase._dbName = "mediaStorageDB";
browserDatabase._storeName = "myStore";
var request = indexedDB.open(browserDatabase._dbName);
// database exist
request.onsuccess = function(e)
{
browserDatabase._db = e.target.result;
// this is specifically for chrome, because it does not support onupgradeneeded
if (browserDatabase._dbVersion != browserDatabase._db.version)
{
request = browserDatabase._db.setVersion(browserDatabase._dbVersion.toString());
request.onerror = function(e) { alert("error") };
request.onblocked = function(e)
{
b = 11; // for some reason the code goes here...
}
request.onsuccess = function(e)
{
browserDatabase._db.createObjectStore(browserDatabase._storeName, {autoIncrement: true});
}
}
}
答案 0 :(得分:2)
在您的代码示例中,您说您进入了onblocked回调。您可以获得此回调的唯一方法是,您仍然可以打开与数据库的事务/连接。 (除了您正在使用的那个。)这意味着您必须先关闭所有其他事务/连接,然后才能调用setVersion。
答案 1 :(得分:0)
当有线的东西发生在IndexedDB上时,我“清除托管应用中的数据”,退出Chrome窗口并喝杯咖啡。之后一切正常。 :-D
browserDatabase._dbVersion < browserDatabase._db.version
。降级是不可能的。 dbVersion = 4
不应该被轻视。您可以使用dbVersion = 5
打开其他标签,或者浏览器可能会在其他地方或自身更新中获得您的响应。所有这些都不值得追查背后的原因。