SECURITY_ERR:DOM异常18在WebView中打开数据库时

时间:2013-04-17 14:20:58

标签: android webview

我有两个应用程序,它们都在webview中使用SQL数据库。

其中一个在我的设备上工作得很好,但另一个在尝试打开数据库时引发了这个错误。

未捕获错误:SECURITY_ERR:DOM异常18

两个项目中的一切都很相似,我尝试过很多东西,但没找到原因。

我从零开始创建一个项目,它运行正常。

3 个答案:

答案 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个月前)