Javascript Internet Explorer上的Indexedb

Javascript Internet Explorer上的Indexedb,javascript,internet-explorer,indexeddb,Javascript,Internet Explorer,Indexeddb,不知道你们谁能帮我做这个?我开发了一个web应用程序,它使用了一个索引数据库和95个对象存储。DB在Chrome上安装得很好,但在IE上通常会产生错误(我希望在IE上运行它,原因我在这里不讨论)。问题是在onUpgrade例程中创建95个对象存储(即使我没有在其中放入数据)。下面是一个代码示例: encode (NoofCKlistItems,"NoofCKlistItems"); encode (pgtxt,"pgtxt"); //there are 95 statements like

不知道你们谁能帮我做这个?我开发了一个web应用程序,它使用了一个索引数据库和95个对象存储。DB在Chrome上安装得很好,但在IE上通常会产生错误(我希望在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个调用链接到encode函数,但没有改变。我曾尝试在encode函数的末尾添加一个延迟,但随后它丢失了事务。唯一可靠工作的方法是(a)将对象存储的数量减半,或(b)在encode函数的末尾添加警报,因此程序必须在每个变量处停止(因此您必须单击95次!)

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

有什么想法吗

非常感谢


史蒂夫·莫斯

我已经解决了这个问题。我只是在encode例程的末尾做了一个检查,看看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');}
        }
函数编码(j_ThisField,StoreName){
objectStore=dbaccept.createObjectStore(StoreName);
对于(j_这个域中的i){
itemnumber=parseInt(j_ThisField[i][0],10);
objectStore.put(j_ThisField[i][1],itemnumber);}
计数器++;
如果(StoreName==){alert('complete');}
}

每次都有效

对不起,我错过了一条重要的线路。当计数器达到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');}
        }
函数编码(j_ThisField,StoreName){
objectStore=dbaccept.createObjectStore(StoreName);
对于(j_这个域中的i){
itemnumber=parseInt(j_ThisField[i][0],10);
objectStore.put(j_ThisField[i][1],itemnumber);}
计数器++;
如果(计数器==45){alert('Click to continue dowload');}
如果(StoreName==){alert('Click to complete the download');}
}

谢谢你的建议

你能发布一个可运行的示例吗?即使你只是做了一个循环,生成95个连续的
StoreName
s?如果这只是IE中的一个限制,那也不会令人震惊,他们的IndexedDB实现是非常错误的。嗨,Jeremy。谢谢你的主意。我以前试过你建议的循环计数器,但没用。我会看看是否能在周末发布一些可以运行的东西。史提夫·莫斯