使用iOS 8 / Safari的IndexedDB

时间:2014-12-04 16:48:13

标签: javascript safari indexeddb ios8.1

我们有一个测试用来测试带有不同浏览器和操作系统的indexeddb。 这只是简单的测试:

     open database, add some data, retrieve some data

就是这样。它在Chrome(39),Firefox(新版本),MacBook Pro和OSX 9.5,基于Android的浏览器中运行良好。

当我们尝试使用iOS 8的Ipad3时,页面没有做任何事情。我们也看不到任何错误。

任何想法,如何解决问题?

我们使用indexeddb.shim.js文件来假设帮助,但仍然无效。

 if (!window.indexedDB) {
     window.alert("Your browser doesn't support a stable version of IndexedDB.")
 }

 var request = indexedDB.open("kitta db1");

 request.onupgradeneeded = function() {
       //create Store and etc
 };

 request.onsuccess = function() {
   db = request.result;

 };

iOS 8中的错误:

类型错误:null不是该行上的Object:

 var request = indexedDB.open("kitta db1");

任何想法我该如何解决?

1 个答案:

答案 0 :(得分:1)

看起来变量indexedDB为null。 polyfill执行此操作:

e.indexedDB=e.indexedDB||e.webkitIndexedDB||e.mozIndexedDB||e.oIndexedDB||e.msIndexedDB 

所以它将变量设置为其中一个值。如果这些值都是undefined / null,则indexedDB变量保持为null。

测试这些变体是否具有值(较少的Microsoft,Opera和Mozilla)的简单方法如下所示:

console.log('indexedDB: ', indexedDB);
console.log('webkitIndexedDB: ', webkitIndexedDB);

如果webkitIndexedDB未定义且indexedDB未定义,那么iOS显然不支持indexedDB。

一个简单的search on caniuse.com表示支持iOS8和iOS8.1上的indexedDB but buggy