2014-10-02 3 views
3

У меня возникли проблемы с Indexeddb, он, похоже, перестает работать, когда вы привязываете веб-приложение к главному экрану. Все работает нормально, когда работает в браузере Safari. Это известное ограничение?Indexeddb не работает на iPhone IOS 8 из веб-приложения

+0

Я помню, кто-то еще жалуясь примерно то же самое недавно. Извините, я не могу найти ссылку. – dumbmatter

ответ

2

Известная проблема. Среди других ошибок iOS8 IndexedDB.

1

window.indexedDB объект как в «Домашнем экране», так и в веб-приложении «Кордова» на iOS 8 является нулевым. И еще - это только для чтения. Так indexedDBShim также не удалось ...

Подход, с window._indexedDB (https://github.com/axemclion/IndexedDBShim/issues/167) работает для меня ...

0

IndexedDB наполовину поддерживается Cordova! У них есть только только для чтения базы данных (суммарно бесполезно) Но вы можете сделать обходной путь, используя polyfill, например Polyfill Indexeddb

Задачи о polyfill в случае ios8 есть, что indexdb прокладка обнаружить, что indexdb установлен , но не зная, что они являются версией только для чтения, они используют window.indexdb, а не прокладку. Поэтому вы должны принудительно использовать indexshim вместо window.indexeddb.

Открыть код pollyfill найти блок кода:

if ((typeof window.indexedDB === "undefined" || poorIndexedDbSupport) && typeof window.openDatabase !== "undefined") { 
    window.shimIndexedDB.__useShim(); 
} 
else { 
    window.IDBDatabase = window.IDBDatabase || window.webkitIDBDatabase; 
    window.IDBTransaction = window.IDBTransaction || window.webkitIDBTransaction; 
    window.IDBCursor = window.IDBCursor || window.webkitIDBCursor; 
    window.IDBKeyRange = window.IDBKeyRange || window.webkitIDBKeyRange; 
    if(!window.IDBTransaction){ 
     window.IDBTransaction = {}; 
    } 
    /* Some browsers (e.g. Chrome 18 on Android) support IndexedDb but do not allow writing of these properties */ 
    try { 
    window.IDBTransaction.READ_ONLY = window.IDBTransaction.READ_ONLY || "readonly"; 
    window.IDBTransaction.READ_WRITE = window.IDBTransaction.READ_WRITE || "readwrite"; 
    } catch (e) {} 
} 

и заменить:

window.shimIndexedDB.__useShim(); 

вы можете использовать в индексированной с window.shimIndexedDB

Смежные вопросы