whatwg - Android webview y localStorage
w3c html standards (6)
Faltaba lo siguiente:
settings.setDomStorageEnabled(true);
Tengo un problema con una vista web que puede acceder al almacenamiento local mediante una aplicación HTML5
. El archivo test.html me informa de que mi navegador no soporta el almacenamiento local (es decir, la vista webview
). Si tienes alguna sugerencia ..
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;
}
}
}
Si su aplicación usa vista web múltiple, seguirá teniendo problemas: localStorage no se comparte correctamente en todas las vistas web.
Si desea compartir los mismos datos en múltiples vistas web, la única forma es repararlo con una base de datos java y una interfaz javascript.
Esta página en github muestra cómo hacer esto.
¡espero que esto ayude!
Si tiene varias vistas web, localstorage no funciona correctamente.
dos sugerencias:
- usando la base de datos java en lugar de webview localstorage que explica "@ Guillaume Gendre" (por supuesto que no funciona para mí)
- el almacenamiento local funciona como json, así que los valores se almacenan como "clave: valor" .puede agregar la identificación única de su navegador a su clave y usar el almacenamiento local de Android normal
También he tenido problemas con la pérdida de datos después de reiniciar la aplicación. Añadiendo esto ayudó:
webView.getSettings().setDatabasePath("/data/data/" + webView.getContext().getPackageName() + "/databases/");
Una solución que funciona en mi Android 4.2.2, compilada con un objetivo de compilación de 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());
}
setDatabasePath() método setDatabasePath() estaba en desuso en el nivel 19 de API. Le aconsejo que use la configuración regional de almacenamiento de esta manera:
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/");
}