1

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

其中一个在我的设备上运行良好,但另一个在尝试打开数据库时会引发此错误。

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

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

我从头开始了一个项目,它运行良好。

4

3 回答 3

4

这花了我一整天的时间来弄清楚,所以我想提供有关如何在 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 将无法工作。你已经被警告过了。

于 2014-10-08T21:50:41.093 回答
3

我通过覆盖 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);
    }
});
于 2013-06-14T18:01:59.717 回答
1

我正面临着这个问题。但我不知道我的建议对你有没有帮助

我已经创建了一个这样的数据库:

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 个月前提出的那样)

于 2013-05-31T15:27:10.027 回答