Android - 让Webview的DomStorage在应用关闭后保持持久化

25

我在开发一款使用Webview显示数据的安卓应用时遇到了一个巨大的问题。在Webview中使用的网站使用HTML 5的localStorage API。

为了启用此功能,我设置了Webview设置,如下所示:

webview.getSettings().setDomStorageEnabled(true);
webview.getSettings().setJavaScriptEnabled(true);

localStorage API能够使用,但是当我关闭应用程序并杀死进程时,localStorage会完全被清除,重新加载后,所有的数据都丢失了。

我的问题很简单:如何使Webview的DomStorage持久化,即使在关闭应用程序时也是如此?

感谢您未来的回答。


2
我已经找到了解决方案,您需要设置databasePath以保存数据: webview.getSettings().setDatabasePath(); - jimroot25
1
你能分享一下你设置的路径是什么吗?我现在也面临着同样的问题。 - dongshengcn
我的回答解决了你的问题吗? - Panthro
1
能否直接从Java读取由HTML5设置的本地存储变量?我在其他地方看到过这个问题,但似乎没有人有答案? - Anthony Webb
6个回答

10

您是否设置了DatabasePath?如果您没有调用设置方法,Android默认不知道在哪里保存DOMDatabase。

webview.getSettings().setDatabasePath()

1
请注意,您只能调用一次setDatabase路径 - 后续的调用将被忽略。在任何后续调用生效之前,您需要终止应用程序以强制WebKit重新加载(调用Activity.finish()不能保证此操作)。 - gheese

10
// Confimed on android 2.1 emulator
// enable javascript localStorage

WebSettings webSettings = myWebView.getSettings();
webSettings.setDomStorageEnabled(true);   // localStorage

// e.g., if your package is www.myapp.whatever;
webSettings.setDatabasePath("/data/data/www.myapp.whatever/databases/");

在安卓2.2上怎么样?它能正常工作吗?因为对我来说,在2.1上可以,但在2.2上不行。 - Karthi
如果您在使用中遇到“setDatabasePath已弃用”的错误,在Chromium WebKit浏览器中会自行处理路径。请参见此答案以获取更多信息 - Burak Tokak

7

您需要启用数据库并设置其路径:

webview.getSettings().setDatabaseEnabled(true);
webview.getSettings().setDatabasePath();
webSettings.setDomStorageEnabled(true);

第一行让我花了很长时间才明白……


0
WebSettings webSettings = myWebView.getSettings();
webView.getSettings().setDatabaseEnabled(true);

这就是您需要的最新API。 Chrome会自动管理数据库路径。


0

上述帖子混淆了两个不同的概念:

为了使您的数据在会话关闭后仍然存在,请确保您没有在JavaScript中使用sessionStorage。

DOMStorage和数据库存储是两个不同的东西。数据库存储不是HTML5的一部分:http://www.tutorialspoint.com/html5/html5_web_sql.htm

DOMStorage与HTML5更相关,包括会话存储,这将在关闭浏览器时自动消失。您可以通过搜索“本地存储”而不是“DOM存储”来获得更多信息。

http://viralpatel.net/blogs/introduction-html5-domstorage-api-example/

因此,要启用DOM存储,您只需要这样做: webSettings.setDomStorageEnabled(true);

0

这个问题已经在这篇文章中得到了回答,并提供了Android v4.1.1的更新。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接