IndexedDB onupgrade需要不在iOS上触发

时间:2014-03-27 10:29:21

标签: javascript html5 mobile-safari indexeddb shim

我已经阅读了several questions关于此类问题的内容,因此我知道onupgradeneeded的用途,应该调用它的时间以及浏览器兼容性问题。

我正在开发一款应该支持桌面版Chrome和iOS版Safari的网络应用。我在Chrome中使用了IndexedDB,但是当我使用移动版Safari时,使用IndexedDBShim实现了回退到WebSQL。

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

目前,我的修复是要显示一条警告,要求用户刷新页面 - 然后就可以了。

我能做些什么呢?

1 个答案:

答案 0 :(得分: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(){

简而言之,你无法做到这一点,因为它是垫片中的一个错误,延迟代码是我认为解决这个问题的唯一方法。另一种可能性是修复垫片,但我认为这需要更多时间。