Internet Explorer上的Indexedb

时间:2016-02-12 18:34:46

标签: javascript internet-explorer indexeddb

我想知道你们有没有人可以帮助我吗?我开发了一个Web应用程序,它使用带有95个对象库的索引数据库。数据库安装在Chrome上很好,但通常会在IE上产生错误(我想让它运行的原因我不会在这里讨论)。问题是在onUpgrade例程中创建了95个对象存储(即使我没有放入数据)。以下是代码示例:

encode (NoofCKlistItems,"NoofCKlistItems");
 encode (pgtxt,"pgtxt");
 //there are 95 statements like the ones above

   function encode(j_ThisField,StoreName) {
        objectStore = dbInterview.createObjectStore(StoreName);
        for (i in j_ThisField) { 
        itemnumber =  parseInt(j_ThisField[i][0], 10);   
        objectStore.put(j_ThisField[i][1],itemnumber); }
        }

我想不出办法解决这个问题。我尝试用回调将95次调用链接到编码函数,但没有改变。我已经尝试在编码函数的末尾添加延迟,但随后它丢失了事务。唯一可靠的工作是(a)将对象存储的数量减半,或者(b)在编码函数结束时发出警报,因此程序必须在每个变量处停止(因此您必须单击95倍!)。

安装数据库后,我还没有找到添加到对象库的方法。升级事件会删除所有内容并重新启动,因此问题仍然存在。

有什么想法吗?

非常感谢

史蒂夫莫斯

2 个答案:

答案 0 :(得分:0)

我已经解决了这个问题。我只是在编码例程的末尾检查,看看95个变量中的最后一个是否被写入indexeddb。如果是最后一个,则会发出警报以说明下载已完成。这似乎给了IE完成处理所需的喘息空间。因此编码例程变为:

function encode(j_ThisField,StoreName) {
        objectStore = dbInterview.createObjectStore(StoreName);
        for (i in j_ThisField) { 
        itemnumber =  parseInt(j_ThisField[i][0], 10);   
        objectStore.put(j_ThisField[i][1],itemnumber); }
        counter++;
        if (StoreName===<THE LAST VARIABLE NAME>){alert('complete');}
        }

每次都有效。

答案 1 :(得分:0)

对不起,我错过了一条关键路线。当计数器达到45时,我还必须添加警报。这与发现IE处理90个变量中的一半而不是整个90变量有关。因此编码例程是:

function encode(j_ThisField,StoreName) {
        objectStore = dbInterview.createObjectStore(StoreName);
        for (i in j_ThisField) { 
        itemnumber =  parseInt(j_ThisField[i][0], 10);   
        objectStore.put(j_ThisField[i][1],itemnumber); }
        counter++;
        if (counter===45){alert('Click to continue dowloading');}
        if (StoreName===<THE LAST VARIABLE NAME>){alert('Click to complete the download');}
        }

感谢您的建议