我有两个应用程序,它们都在 webview 中使用 SQL 数据库。
其中一个在我的设备上运行良好,但另一个在尝试打开数据库时会引发此错误。
未捕获的错误:SECURITY_ERR:DOM 异常 18
两个项目中的一切都相似,我尝试了很多东西但没有找到原因。
我从头开始了一个项目,它运行良好。
这花了我一整天的时间来弄清楚,所以我想提供有关如何在 Android 4.2 和 4.3 上解决此问题的完整文档。
您可以file://
从WebView 中的 URL 使用 Web SQL 。科尔多瓦人设法做到了。您必须做的只有三件事:
1)打电话setDatabaseEnabled()
(呃):
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);
}
});
如果您跳过这 3 个步骤中的任何一个,那么您将收到 DOM Exception 18 错误并且 Web SQL 将无法工作。你已经被警告过了。
我通过覆盖 onExceededDatabaseQuota 方法解决了“SECURITY_ERR: DOM Exception 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);
}
});
我正面临着这个问题。但我不知道我的建议对你有没有帮助
我已经创建了一个这样的数据库:
db = window.openDatabase("myDatabase", "1.0", "my.Database", 1024);
在 Android 4.0.3 上没有问题,问题出现在 Android 4.1 上(SECURITY_ERR: DOM Exception 18)
然后我通过删除“dotes”和奇怪的字符来修改我的数据库名称,如下所示:
db = window.openDatabase("myDatabase", "1.0", "myDatabase", 1024);
然后我的问题就解决了:)
我正在谷歌搜索该问题的解决方案,然后我现在已经解决了:D
希望这是您问题的解决方案(正如问题 1 个月前提出的那样)