IndexedDBShim polyfill版本不匹配

时间:2014-05-15 13:18:22

标签: javascript indexeddb

我正在使用polyfill indexedDBShim Here,我有一个错误,我不知道如何调试它或知道如何解决它。

我的错误:

unable to open database, version mismatch, '1' does not match the currentVersion of '1.0'

它在indexedDB兼容的浏览器上工作正常,但是当我在Safari上尝试它时,我有这个错误..

我刚刚这样做了:

var request = indexedDB.open( 'products', 1 );
request.onupgradeneeded = function( e ) {
    console.log('Upgrading...');
    var thisDB = e.target.result;

    if ( !thisDB.objectStoreNames.contains( "devices" ) ) {
        thisDB.createObjectStore( "devices", { keyPath: "title" } );
        thisDB.createIndex( "title", "title", { unique: true } );
    }
};

request.onsuccess = function( e ) {
    console.log('Success!');
    that.db = e.target.result;
    //that.saveProducts( data );
};

request.onerror = function( e ) {
    console.log('Error!');
    console.dir( e );
};

有人可以帮我吗?

1 个答案:

答案 0 :(得分:2)

这个垫片最终导致了一些糟糕的事情,让我告诉你! (我们收到很多问题。)

首先,版本既不应该是字符串也不应该是浮点数。它们应该是每个规格大于零的整数。所以这不对。

来自我的dash docs

  

Version数字是   正整数大于零。程序员可以设置一个   通过打开现有数据手动或隐含地获取数据库的版本   版本号比数据库大的数据库名称   包含的内容。虽然数据库的名称永远不会改变,但数据库   版本一直在变化。

     

指定大于当前的版本允许我们输入a   “版本更改”事务,用于启用数据库架构更改。   如果未指定版本,则数据库将以最多打开   最近的数据库版本。

     

数据库版本号存储为8-byte "int long long"   在IDB的底层C编程语言实现中   可以在118446744073709551615之间的任意位置编号。

以下是我使用常规IDB调试/解决的方法:在没有版本的情况下打开数据库。这应该使用最新版本打开连接,响应对象将为您提供当前版本。比较两者以找到您的应用程序错误。

值得注意的是,数据库打开请求应提供一些属性,以帮助您在versionchange event.newVersionevent.oldVersion

时保持干净且一致的应用程序状态