IndexedDB.open在Safari iOS 8.1.1上返回null并停止在Cordova上执行。 iOS 8.1.2甚至最差

时间:2014-12-11 05:31:52

标签: javascript ios cordova safari indexeddb

我知道iOS中的IndexedDB实现非常错误,就像不同表之间的共享ID一样。但它对我来说根本不起作用。我正在尝试为iOS开发一个应该使用IndexedDB的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变量为null,它会在下一行崩溃。在iOS 8.1.2上运行时,它会在显示日志的open()来电时崩溃:

  

SecurityError:DOM异常18:尝试突破用户代理的安全策略

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

1 个答案:

答案 0 :(得分:3)

遗憾的是,UIWebView

不支持indexedDB

http://www.sencha.com/blog/apple-shows-love-for-html5-with-ios-8

  •   

    IndexedDB被添加到iOS 8 Safari和“WKWebView”

  •   

    IndexedDB在iOS 8“UIWebView”或主屏应用

    中不可用

但您可以尝试使用WKWebView cordova插件 http://devgirl.org/2014/11/10/boost-your-ios-8-mobile-app-performance-with-wkwebview/