我们正在开发使用indexedDB的框架的Web应用程序。一切都很顺利,但后来我们在iPad上进行了测试,突然间它根本没有加载页面。认为这将是一个小问题,但经过一些测试我们发现,该应用程序正在崩溃:
TypeError:null不是验证'request'的对象
它在线上崩溃了:
var request = indexedDB.open("FMVare",415);
这在请求变量中存储null,然后在那之后有:
request.onerror(...)
这将为我们提供上面写的错误消息。
我花了一天时间寻找修复程序,但只发现indexedDb的iOS实现是“buggy”。但我甚至无法打开数据库,所以其他地方可能存在问题。我的同事也告诉我,它在1个月之前工作正常,但是这个实现的文件(根据git)没有改变......永远。
我尝试使用pollyfill将其更改为WebSQL,除了iPad浏览器(Safari,Chrome)之外,它还可以在任何地方使用。这一次它抛出了不同的错误,我只能谷歌一些SQL语法错误,显然不是这种情况,如果它在其他地方工作。
我已经尝试了一些建议,这些建议据说用polinfill indexedDB替换了_indexedDB等等。但是再一次,除了iPad之外,它在任何地方都有效。
当我记录变量请求时,它返回null。如果我记录indexedDB或window.indexedDB,它返回IDBFactory对象,所以它就在那里,但是.open方法失败了,没有调用.onerror或.onsucess方法。
由于我发现很多人抱怨在iOS上使用indexedDB错误实现,这意味着他们能够使用它。那我的iPad可能会出现什么问题?我的意思是我可以尝试更新到iOS 9,但这并不是我们想要实现的目标。
我尝试删除缓存,更改版本号(更大和更小),创建不同的数据库(不同的名称),pollyfill ...但仍然无法使其工作,每次我调用indexedDB.open(databasename),它返回null和崩溃。
有什么想法吗?
编辑: 我用垫片得到的错误是
sysdb事务中的错误 - 创建dbVersions时。
然后我用
获取SQLError对象“code:5”
和
“消息:无法准备声明(1未经授权)”
错误发生在垫片的createSysDB(成功,失败)功能中。
更新 我在iPad上尝试了一个名为WebView Rendering的应用程序,所以我可以尝试WKWebView能够运行我的应用程序。它是!所以问题实际上是对IndexedDB的UIWebView支持。
我觉得很奇怪,即使在最新的iOS版本上更新后你也无法在iOS Safari上使用IndexedDB。