【问题标题】:chrome indexed database setVersion request filled with exceptionschrome 索引数据库 setVersion 请求充满异常
【发布时间】:2012-10-24 20:17:00
【问题描述】:

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

}

【问题讨论】:

  • 你能给我一些关于你得到的 IDBException 的更多信息吗?

标签: google-chrome indexeddb


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 真的!那么,这是旧规范的问题。
    • 我已经为 indexeddb 构建了一个包装器。当 chrome 还没有实现 deleteDatabase 函数时,我将 db 的版本设置为 -1 并清除它的所有内容作为解决方法。 setVersion 也使用了字符串值,因此很难检查版本是否增加。当然,当您不需要输入数字时
    • 我看到的问题是,如果允许降级,一旦连接尝试更新,而其他连接尝试降级并成为循环。如果在一个选项卡中使用更新,而在另一个选项卡中运行旧版本,则可能会出现这种情况。
    • 没有尝试过,但在我的库中这是不可能的。如果您尝试降级,我会自己发送消息:)。我给了它 -1 以确保他们下次要创建数据库时该数字可能是 0。(因为它高于 -1 他们不会收到错误:))
    猜你喜欢
    • 2012-11-14
    • 2012-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-06
    • 1970-01-01
    • 1970-01-01
    • 2014-08-05
    相关资源
    最近更新 更多