Javascript IndexedDB.open在Safari iOS 8.1.1上返回null,并在Cordova上停止执行。iOS 8.1.2上最差的版本

Javascript IndexedDB.open在Safari iOS 8.1.1上返回null,并在Cordova上停止执行。iOS 8.1.2上最差的版本,javascript,ios,cordova,safari,indexeddb,Javascript,Ios,Cordova,Safari,Indexeddb,我知道iOS中的IndexedDB实现有很多缺陷,比如不同表之间的共享ID。然而,这对我来说根本不起作用。我正在尝试为iOS开发Cordova应用程序,该应用程序应使用IndexedDB,因此我创建了以下代码: window.indexedDB = window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB; window.IDBTransaction = window.IDBTr

我知道iOS中的IndexedDB实现有很多缺陷,比如不同表之间的共享ID。然而,这对我来说根本不起作用。我正在尝试为iOS开发Cordova应用程序,该应用程序应使用IndexedDB,因此我创建了以下代码:

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异常18:试图突破用户代理的安全策略


这是什么$@#%!这是怎么回事?我看到一些人抱怨错误行为,但我甚至无法打开数据库,这是正常的还是什么?

不幸的是,UIWebView不支持indexedDB

  • IndexedDB已添加到iOS 8 Safari和“WKWebView”中

  • IndexedDB在iOS 8“UIWebView”或主屏幕应用程序中不可用

但您可以尝试使用WKWebView cordova插件

感谢您提供WKWebView信息。不幸的是,当使用cordova插件并尝试打开DB时,它会触发onerror回调,其中包含一个非常空的错误对象,因此我不知道发生了什么。