【问题标题】:Indexedb on Internet ExplorerInternet Explorer 上的 Indexeddb
【发布时间】:2016-02-12 18:34:46
【问题描述】:

我想知道你们中是否有人可以帮助我解决这个问题?我开发了一个使用具有 95 个对象存储的索引数据库的 Web 应用程序。数据库在 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次!)。

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

有什么想法吗?

非常感谢

史蒂夫·莫斯

【问题讨论】:

  • 你能发布一个 runnable 的例子吗?即使您只是创建一个循环生成 95 个连续的StoreNames?
  • 如果它只是 IE 中的一个限制也不会令人震惊,他们的 IndexedDB 实现是相当错误的。
  • 嗨杰里米。谢谢你的主意。我之前按照您的建议尝试了循环计数器,但没有帮助。我会看看我是否可以在周末发布一些可运行的东西。史蒂夫·莫斯

标签: javascript internet-explorer indexeddb


【解决方案1】:

我已经解决了这个问题。我只是在编码例程的末尾进行了检查,以查看 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');}
        }

它每次都有效。

【讨论】:

    【解决方案2】:

    抱歉,我错过了一条关键线。当计数器达到 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');}
            }
    

    感谢您的建议

    【讨论】:

      猜你喜欢
      • 2015-06-24
      • 2020-01-26
      • 1970-01-01
      • 2013-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-09
      • 2011-06-05
      相关资源
      最近更新 更多