J'ai un problème avec une vue Web qui peut accéder au localStorage par une application HTML5
. Le fichier test.html m’informe que la mémoire de stockage locale n’est pas prise en charge par mon navigateur (c.-à-d. Le webview
). Si vous avez une suggestion ..
package com.test.HelloWebView;
import Android.app.Activity;
import Android.content.Context;
import Android.os.Bundle;
import Android.util.Log;
import Android.view.KeyEvent;
import Android.webkit.WebChromeClient;
import Android.webkit.WebSettings;
import Android.webkit.WebStorage;
import Android.webkit.WebView;
import Android.webkit.WebViewClient;
public class HelloWebView extends Activity {
WebView webview;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
webview = (WebView) findViewById(R.id.webview);
webview.getSettings().setJavaScriptEnabled(true);
webview.setWebViewClient(new HelloWebViewClient());
webview.loadUrl("file:///Android_asset/test.html");
WebSettings settings = webview.getSettings();
settings.setJavaScriptEnabled(true);
settings.setDatabaseEnabled(true);
String databasePath = this.getApplicationContext().getDir("database", Context.MODE_PRIVATE).getPath();
settings.setDatabasePath(databasePath);
webview.setWebChromeClient(new WebChromeClient() {
public void onExceededDatabaseQuota(String url, String databaseIdentifier, long currentQuota, long estimatedSize, long totalUsedQuota, WebStorage.QuotaUpdater quotaUpdater) {
quotaUpdater.updateQuota(5 * 1024 * 1024);
}
});
}
public boolean onKeyDown(int keyCode, KeyEvent event) {
if ((keyCode == KeyEvent.KEYCODE_BACK) && webview.canGoBack()) {
webview.goBack();
return true;
}
return super.onKeyDown(keyCode, event);
}
private class HelloWebViewClient extends WebViewClient {
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
}
}
Il manquait ce qui suit:
settings.setDomStorageEnabled(true);
setDatabasePath () Cette méthode est obsolète dans l'API de niveau 19. Je vous conseille d'utiliser les paramètres régionaux de stockage comme ceci:
webView.getSettings().setDomStorageEnabled(true);
webView.getSettings().setDatabaseEnabled(true);
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KitKat) {
webView.getSettings().setDatabasePath("/data/data/" + webView.getContext().getPackageName() + "/databases/");
}
J'ai également eu un problème de perte de données après le redémarrage de l'application. Ajouter ceci a aidé:
webView.getSettings().setDatabasePath("/data/data/" + webView.getContext().getPackageName() + "/databases/");
Une solution qui fonctionne sur mon Android 4.2.2, compilée avec la cible de construction Android 4.4W:
WebSettings settings = webView.getSettings();
settings.setDomStorageEnabled(true);
settings.setDatabaseEnabled(true);
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KitKat) {
File databasePath = getDatabasePath("yourDbName");
settings.setDatabasePath(databasePath.getPath());
}
Si votre application utilise plusieurs vues Web, vous aurez toujours des problèmes: localStorage n'est pas correctement partagé entre toutes les vues Web.
Si vous souhaitez partager les mêmes données dans plusieurs vues Web, le seul moyen est de les réparer avec une base de données Java et une interface javascript.
Cette page sur github montre comment faire cela.
espérons cette aide!
si vous avez plusieurs vues Web, le stockage local ne fonctionne pas correctement.
Deux suggestions: