2014-12-04 54 views
4

我們有一個測試用例來測試帶有不同瀏覽器和操作系統的indexeddb。 這只是簡單的測試:IndexedDB with iOS 8/Safari

 open database, add some data, retrieve some data 

就是這樣。它可以在Chrome(39),Firefox(新版本),帶有OSX 9.5的MacBook Pro,基於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:

類型錯誤:空是不上線的對象:

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

任何想法,我該如何解決?

回答

1

它看起來像變量indexedDB爲空。該polyfill做到這一點:

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

所以它是變量設置爲這些值之一。如果這些值都是undefined/null,那麼indexedDB變量保持爲空。

一個簡單的方法來測試這些變化是否具有價值(扣除微軟,Opera和Mozilla的)會是像下面這樣:

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

如果webkitIndexedDB是不確定的,是IndexedDB是不確定的,那麼iOS版顯然不支持indexedDB。

簡單的search on caniuse.com表示支持iOS8和iOS8.1上的indexedDB but buggy

+0

兩個都返回IDBFactory,我猜他們不是null,iOS支持這兩個。我聽說過這個錯誤,但有沒有解決方法,或API來解決它? – amol01 2014-12-05 08:03:06

+0

如果它們不是null,那麼你可能不需要使用墊片。你周圍的代碼有其他問題,導致indexedDB變量不被定義。也許需要indexedDB.open的版本參數。也許使用窗口正在做出意想不到的事嘗試使用沒有空格的數據庫名稱。 – Josh 2014-12-05 14:40:49

+0

我只是試了一切:版本號,嘗試數據庫名稱的所有組合,仍然是相同的錯誤。與其他設備和瀏覽器完美兼容,但不支持Safari 8.1的iOS 8.1。它適用於MacBook Pro上的Safari,雖然對我來說有點奇怪。 – amol01 2014-12-05 15:09:39