我正在针对iOS上的Chrome的Web应用程序上使用PouchDB 3.2.1。下面的错误也出现在 PouchDB 3.2.0 中。
当尝试在iOS上的Chrome上创建与本地数据库的连接时,PouchDB使用该浏览器的WebSQL数据库。但是,在iPhone 5和iPhone 5s上运行应用程序时,此操作会间歇性失败,并出现SecurityError:DOM异常18。我还没有能够在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
这是 pouchdb.js 第 4232 行附近的代码:
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;
}
刷新浏览器页面并不能解决问题。关闭浏览器选项卡并重新打开页面也不会。解决此问题的唯一方法是强制退出浏览器并重新启动应用程序。但是,对于我们的用户来说,这不是可接受的解决方法。
似乎在iOS 8.1.3中消失了。这已经在iPhone 6和iPhone 5上得到了验证。
您的错误消息似乎是KitKat之前的Android设备上的问题。
不确定 iOS 上的 Chromo 是否有同样的问题,但值得看看这里的 pouchdb 常见错误以获取更多信息:
http://pouchdb.com/errors.html#android_pre_kitkat