我知道iOS中IndexedDB的实现很麻烦,就像不同表之间的共享ID一样.但是,它对我根本不起作用.我正在尝试为应该使用IndexedDB的iOS开发Cordova应用程序,因此我创建了以下代码:
window.indexedDB = window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB;
window.IDBTransaction = window.IDBTransaction || window.webkitIDBTransaction || window.msIDBTransaction;
window.IDBKeyRange = window.IDBKeyRange || window.webkitIDBKeyRange || window.msIDBKeyRange;
var request = window.indexedDB.open("mydata"); //also tried open("mydata", 1) with same result
console.log('OPEN DB')
request.onupgradeneeded = function() {...};
request.onsuccess = function() {...};
在Cordova应用程序中运行此代码段时,不显示OPEN DB打印,执行卡在indexedDB.open调用中(没有错误日志或任何内容).我以为这可能是Cordova的问题,所以我决定在普通的Safari浏览器中运行相同的代码,尽管它应该与Cordova只是使用UIWebview相同(据我了解,应该使用与浏览器相同的Webkit版本).
在Safari iOS 8.1.1中运行时,将打印OPEN DB日志,但由于请求变量为null,它会在下一行崩溃.在iOS 8.1.2上运行时,它在open()调用上崩溃,并显示一条日志:
SecurityError: DOM Exception 18: An attempt was made to break through the security policy of the user agent
什么$@#%!正在进行?我看到有人抱怨错误的行为,但我什至无法打开数据库,这是正常现象还是什么?
解决方法:
遗憾的是,UIWebView不支持indexedDB
http://www.sencha.com/blog/apple-shows-love-for-html5-with-ios-8
>
IndexedDB was added to iOS 8 Safari and “WKWebView”
>
IndexedDB is not available in iOS 8 “UIWebView” or Home screen apps
但是您可以尝试使用WKWebView cordova插件
http://devgirl.org/2014/11/10/boost-your-ios-8-mobile-app-performance-with-wkwebview/