【问题标题】:SECURITY_ERR: DOM Exception 18 When opening database in WebViewSECURITY_ERR: DOM Exception 18 在 WebView 中打开数据库时
【发布时间】:2013-04-17 14:20:58
【问题描述】:

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

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

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

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

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

【问题讨论】:

标签: android webview


【解决方案1】:

我花了一整天的时间才弄清楚,所以我想提供有关如何在 Android 4.2 和 4.3 上解决此问题的完整文档。

可以通过 WebView 中的 file:// URL 使用 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 将无法工作。您已收到警告。

【讨论】:

  • 解决了我的问题。我错过了 onExceededDatabaseQuota 代码;现在我已经添加了它,我的问题似乎已经消失了。谢谢。
  • 这绝对是
【解决方案2】:

我通过覆盖 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);
    }
});

【讨论】:

  • 如果您使用的是loadUrl("file://..."),那么这是让openDatabase 在Android 4.2 上运行的正确解决方案。谢谢一百万!
【解决方案3】:

我遇到了这个问题。 但我不知道我的建议对你有没有帮助

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-11-11
    • 2014-07-03
    • 1970-01-01
    • 2015-09-20
    • 2023-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多