Я использую PouchDB 3.2.1 в веб-приложении, предназначенном для Chrome на iOS. Следующая ошибка также появляется в PouchDB 3.2.0.
При попытке создать подключение к локальной базе данных в Chrome на iOS PouchDB использует базу данных WebSQL этого браузера. Однако это периодически завершается ошибкой SecurityError: DOM Exception 18 при запуске приложения как на iPhone 5, так и на iPhone 5s. Я еще не смог воспроизвести эту ошибку на своем iPad 5.
Я создаю новую базу данных PouchDB следующим образом:
var localDBName = "dbd8008497c6f368d";
self.localPouch = new PouchDB(localDBName, {size: 50});
Я также пытался установить размер на 49, 1 и 0 и вообще не устанавливать размер.
Вот трассировка стека, полученная от BugSnag:
[native code]:4232 openDatabase
http://192.168.1.144:8000/app/bower_components/pouchdb/dist/pouchdb.js:4232:48 openDB
http://192.168.1.144:8000/app/bower_components/pouchdb/dist/pouchdb.js:4275:18 WebSqlPouch
http://192.168.1.144:8000/app/bower_components/pouchdb/dist/pouchdb.js:5655:40
[native code]:0 Promise
http://192.168.1.144:8000/app/bower_components/pouchdb/dist/pouchdb.js:5570:28 PouchDB
Вот код рядом со строкой 4232 файла pouchdb.js:
var cachedDatabases = {};
var openDBFunction = (typeof navigator !== 'undefined' &&
navigator.sqlitePlugin &&
navigator.sqlitePlugin.openDatabase) ?
navigator.sqlitePlugin.openDatabase.bind(navigator.sqlitePlugin) :
(typeof sqlitePlugin !== 'undefined' && sqlitePlugin.openDatabase) ?
sqlitePlugin.openDatabase.bind(sqlitePlugin) :
(typeof openDatabase !== 'undefined') ?
openDatabase :
null;
function openDB(name, version, desc, size) {
var db = cachedDatabases[name];
if (!db) {
db = cachedDatabases[name] = openDBFunction(name, version, desc, size);
}
return db;
}
Обновление страницы браузера не решает проблему. Также не работает закрытие вкладки браузера и повторное открытие страницы. Единственный способ решить проблему — принудительно закрыть браузер и перезапустить приложение. Однако это неприемлемый обходной путь для наших пользователей.