Преодоление SecurityError: исключение DOM 18 в PouchDB на мобильном Chrome для iOS

Я использую 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;
}

Обновление страницы браузера не решает проблему. Также не работает закрытие вкладки браузера и повторное открытие страницы. Единственный способ решить проблему — принудительно закрыть браузер и перезапустить приложение. Однако это неприемлемый обходной путь для наших пользователей.


person jkndrkn    schedule 12.01.2015    source источник


Ответы (2)


Похоже, что эта проблема исчезла в iOS 8.1.3. Это было проверено как на iPhone 6, так и на iPhone 5.

person jkndrkn    schedule 06.02.2015
comment
Оказывается, проблема не была связана с PouchDB. Это была ошибка самого WebKit: bugs.webkit.org/show_bug.cgi?id= 140443 - person jkndrkn; 09.02.2015

Ваше сообщение об ошибке похоже на проблему на устройствах Android с предустановленной версией KitKat.

Не уверен, что у Chromo на iOS такая же проблема, но стоит взглянуть на распространенные ошибки pouchdb здесь для получения дополнительной информации:

http://pouchdb.com/errors.html#android_pre_kitkat

person kenjikato    schedule 06.02.2015
comment
Спасибо, но моя проблема связана именно с Chrome/iOS. - person jkndrkn; 06.02.2015