我有两个应用程序,它们都在webview中使用SQL数据库。
其中一个在我的设备上工作得很好,但另一个在尝试打开数据库时引发了这个错误。
未捕获错误:SECURITY_ERR:DOM异常18
两个项目中的一切都很相似,我尝试过很多东西,但没找到原因。
我从零开始创建一个项目,它运行正常。
答案 0 :(得分:4)
这花了我一整天才弄明白,所以我想提供有关如何在Android 4.2和4.3上解决此问题的完整文档。
您可以在WebView中使用file://
网址中的Web SQL。科尔多瓦人设法做到了。您必须做三件事:
1)致电setDatabaseEnabled()
(duh):
webView.getSettings().setDatabaseEnabled(true);
2)设置数据库文件路径。是的,这在Android 4.4中已弃用,但如果您想要避免预先Kitkat中的DOM异常18,则必需:
String databasePath = getContext().getApplicationContext().getDir(
"database", Context.MODE_PRIVATE).getPath();
webView.getSettings().setDatabasePath(databasePath);
3)设置onExceededDatabaseQuota
处理程序。是的,它在Android 4.4中被弃用了,等等等等等。
webView.setWebChromeClient(new WebChromeClient() {
@Override
public void onExceededDatabaseQuota(String url, String databaseIdentifier, long currentQuota, long estimatedSize,
long totalUsedQuota, WebStorage.QuotaUpdater quotaUpdater) {
quotaUpdater.updateQuota(estimatedSize * 2);
}
});
如果您跳过这三个步骤中的任何一个,那么您将收到DOM Exception 18错误,并且Web SQL将无法运行。你已被警告过了。
答案 1 :(得分:3)
我通过覆盖onExceededDatabaseQuota方法解决了“SECURITY_ERR:DOM异常18”。
webView = (WebView) findViewById(R.id.webView1);
webView.setWebChromeClient(new WebChromeClient() {
@Override
public void onExceededDatabaseQuota(String url, String databaseIdentifier, long currentQuota, long estimatedSize,
long totalUsedQuota, WebStorage.QuotaUpdater quotaUpdater) {
quotaUpdater.updateQuota(estimatedSize * 2);
}
});
答案 2 :(得分:1)
我正面临着这个问题。 但我不知道我的建议对你有帮助还是没有
我创建了一个类似的数据库:
db = window.openDatabase("myDatabase", "1.0", "my.Database", 1024);
在Android 4.0.3上没有问题,问题是在Android 4.1上出现(SECURITY_ERR:DOM例外18)
然后我通过删除“dotes”和奇怪的字符来修改我的数据库名称,就像那样:
db = window.openDatabase("myDatabase", "1.0", "myDatabase", 1024);
然后我的问题解决了:)
我正在谷歌搜索解决该问题的解决方案然后我现在已经解决了它:D
希望这是你问题的解决方案(正如问题所述 1个月前)