Android - Making Webview DomStorage persistant aft

2019-01-11 03:37发布

问题:

I'm facing a huge problem developing an Android app which use a Webview to display datas. The website i'm using in the webview use localStorage API of HTML 5.

To enable this feature i've set the webview setting like this :

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

So the localStorage API works but when I close the app (and kill the process), localStorage is completly erased and when I reload it, all my datas are lost.

My question is simple : How to make DomStorage of a Webview persistant even when we close the app ?

Thank you for all you future answers.

回答1:

Did you set the DatabasePath? Android doesn't know where to save the DOMDatabase by default, if you don't set it calling

webview.getSettings().setDatabasePath()


回答2:

// 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/");


回答3:

You must enable the database as well as setting its path:

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

The first line caught me out for quite a while...



回答4:

The above post is mixing two diferent concepts:

To make your data persist after the session is closed make sure you are not using (on your javascript) sessionStorage

DOMStorage and database storage are two different things. Database storage is not part of HTML5: http://www.tutorialspoint.com/html5/html5_web_sql.htm

DOMStorage is more related to HTML5 and includes session storage, which -by design- will disappear when you close your browser. You will find more hits via searching "local storage' that 'DOM storage'.

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

Thus, to enable DOMstorage you just need this: webSettings.setDomStorageEnabled(true);



回答5:

This issue was answered in this post with an update for Android v4.1.1.