2

我正在尝试使用 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});
        }
    }

}
4

2 回答 2

2

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

于 2012-10-25T05:04:24.107 回答
0

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

browserDatabase._dbVersion < browserDatabase._db.version. 降级是不可能的。dbVersion = 4不应掉以轻心。您可能会打开其他选项卡dbVersion = 5,或者浏览器可能会在其他地方等待您的响应或自身更新。这一切背后的原因都不值得追究。

于 2012-10-25T01:06:52.407 回答