0

我已经阅读了有关此类问题的几个问题,因此我知道onupgradeneeded应该何时调用它的目的以及浏览器兼容性问题。

我正在开发一个 Web 应用程序,它应该支持桌面上的 Chrome 和 iOS 上的 Safari。我在 Chrome 中使用 IndexedDB,但在使用移动 Safari 时使用 IndexedDBShim 实现退到 WebSQL。

该系统在 Chrome 中一切正常。在移动版 Safari 中,第一次加载没有缓存数据的页面时,会因为onupgradeneeded 调用而无法创建数据库。但是:如果我重新加载页面,onupgradeneeded 则会调用第二次加载。从那里,垫片工作正常。

目前我的解决方法是显示一个警告,要求用户刷新页面 - 然后它就可以工作了。

我能做什么更好?

4

1 回答 1

1

我还注意到 indexedDBShim 的这个问题。如果您等待几毫秒,它可以正常工作,所以也许您可以延迟您的代码?

我知道这不是一个完美的答案,但这是正在发生的错误:

"could not prepare statement (1 no such table: dbVersions)"

不知何故,这个错误被隐藏了(垫片中的一个错误),作为维护者之一,当我有时间的时候我可能会研究它:)。

发生此错误是因为此代码很快被调用(大约在第 1570 行左右):

tx.executeSql("SELECT * FROM dbVersions where name = ?", [name], function(tx, data){ 

该表尚不存在,因为此代码尚未执行(大约第 1494 行):

tx.executeSql("CREATE TABLE IF NOT EXISTS dbVersions (name VARCHAR(255), version INT);", [], function(){

简而言之,您对此无能为力,因为它是 shim 中的一个错误,我认为延迟代码是修复它的唯一方法。另一种可能性是修复垫片,但我认为这需要更多时间。

于 2014-03-27T15:30:03.070 回答