2013-04-17 43 views
1

我有两个应用程序,它们都在webview中使用SQL数据库。SECURITY_ERR:DOM异常18当在WebView中打开数据库时

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

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

一切都在这两个项目类似,我尝试过很多事情,但没有找到原因。

我从头开始一个项目,它工作正常。

+0

http://stackoverflow.com/questions/8390985/android-4-0-1-breaks-webview-html-5-local-storage – konmik

回答

1

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

我必须创建这样一个数据库:

db = window.openDatabase("myDatabase", "1.0", "my.Database", 1024); 

在Android 4.0.3没有什么问题,问题是在Android 4.1出现(SECURITY_ERR:DOM异常18)

然后我修改了数据库名称去除“宠爱”和奇怪的字符,是这样的:

db = window.openDatabase("myDatabase", "1.0", "myDatabase", 1024); 

然后我的问题解决了:)

我在谷歌上搜索为这个问题的话,我现在已经解决了这个问题的解决方案:d

希望这是你的问题的解决方案(因为这个问题问 1月前)

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); 
    } 
}); 
+0

如果你正在使用'使用loadURL(“文件:// ... “)',那么这是让'openDatabase'在Android 4.2上运行的正确解决方案。太感谢了! – nlawson

4

这花了我一整天搞清楚,所以我想给有关如何在Android 4.2和4.3解决这个问题的完整文档。

可以在WebView中使用来自file:// URL的Web SQL。科尔多瓦人民设法做到了。只是有三件事你必须做到:

1)呼叫setDatabaseEnabled()(杜):

webView.getSettings().setDatabaseEnabled(true); 

2)设置数据库文件路径。是的,这是不赞成使用的是Android 4.4,但它是需要如果你想避免在预奇巧的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异常18错误和Web SQL将无法正常工作。你已被警告。

+0

解决了我的问题。我正在开发onExceededDatabaseQuota代码;现在我已经添加了它,我的问题似乎已消失。谢谢。 –

+0

这绝对是<4.3 Android设备的答案。我有一个Sencha Touch应用程序包装在原生Android应用程序中,并在webview中运行。我发布了一个实现WebSql的更新,我的一些用旧设备的用户只有一个空白的屏幕。添加onExceedDatabaseQuota后,一切似乎都正常工作。谢谢@nlawson! – i2097i

相关问题