我知道 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
日志,但由于 request
变量正在运行,它在下一行崩溃了空
。在 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/
关于javascript - IndexedDB.open 在 Safari iOS 8.1.1 上返回 null 并在 Cordova 上停止执行。在 iOS 8.1.2 上更差,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27415998/