chrome索引数据库setVersion请求填充异常

时间:2012-10-24 20:17:00

标签: google-chrome indexeddb

我试图通过使用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});
        }
    }

}

2 个答案:

答案 0 :(得分:2)

在您的代码示例中,您说您进入了onblocked回调。您可以获得此回调的唯一方法是,您仍然可以打开与数据库的事务/连接。 (除了您正在使用的那个。)这意味着您必须先关闭所有其他事务/连接,然后才能调用setVersion。

答案 1 :(得分:0)

当有线的东西发生在IndexedDB上时,我“清除托管应用中的数据”,退出Chrome窗口并喝杯咖啡。之后一切正常。 :-D

browserDatabase._dbVersion < browserDatabase._db.version。降级是不可能的。 dbVersion = 4不应该被轻视。您可以使用dbVersion = 5打开其他标签,或者浏览器可能会在其他地方或自身更新中获得您的响应。所有这些都不值得追查背后的原因。