IndexedDB.open 在 Safari iOS 8.1.1 上返回 null,并在 Cordova 上停止执行.

IndexedDB.open returns null on Safari iOS 8.1.1 and halts execution on Cordova. Even worst on iOS 8.1.2

本文关键字:并在 Cordova 执行 null 返回 iOS Safari open IndexedDB      更新时间:2023-09-26

我知道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调用处(没有错误日志或根本没有任何内容(。我认为这可能是科尔多瓦的问题,所以我决定在普通的 Safari 浏览器中运行相同的代码,尽管它应该与 Cordova 相同,只是使用 UIWebview,据我了解,应该使用相同的 webkit 版本与浏览器。

在 Safari 中运行时iOS 8.1.1会打印OPEN DB日志,但由于null变量request它在下一行崩溃。在iOS 8.1.2上运行时,它会在open()调用时崩溃,显示日志如下:

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

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

遗憾的是,

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科尔多瓦插件http://devgirl.org/2014/11/10/boost-your-ios-8-mobile-app-performance-with-wkwebview/