2014-09-29 9 views
9

Ho un'applicazione html5 che si avvolge con una WebView. Per memorizzare e recuperare i valori di input dell'utente tra le pagine, utilizzo la funzione localStorage html5.localStorage html5 funzione non funzionante in WebView su dispositivo Android Samsung

Funziona perfettamente con il mio Nexus 4 (Android 4.4.4), ma non funziona su Samsung Galaxy Tab 2 (Android 4.3.x) (= non succede nulla, ma anche nessun errore in logcat). Oppure, per essere più chiari: su Samsung, non funziona se le pagine html sono caricate all'interno della cartella di risorse dell'app. Funziona però se metto le pagine su un server, come di seguito nella riga fuori controllo.

Tuttavia, su Nexus 4, il caricamento da file: /// android_asset/e anche se carico le pagine su un browser desktop (Chrome, Firefox) da file: // percorso, funziona anche.

Aggiornamento 1: Ho appena avuto un altro utente che ha segnalato il problema con un dispositivo LG, quindi non sembra essere specifico Samsung.

Aggiornamento 2: Memorizzare e caricare il valore da localStorage funziona correttamente su tutti i dispositivi nella stessa pagina, tuttavia, non tra pagine diverse. Nel mio esempio, posso memorizzare e recuperare il valore su 01_home.html, ma quando vado in un'altra pagina nella cartella android_asset, non riesco più a leggerlo (su LG, dispositivi Samsung). Funziona benissimo su Nexus 4 però.

Di seguito sono riportate le impostazioni della visualizzazione Web.

webView = (WebView)this.findViewById(R.id.webView); 
    webViewClient = new MyWebViewClient(this); 
    webViewClient.setSm(sm); 
    webView.setWebViewClient(webViewClient); 
    WebSettings webSettings = webView.getSettings(); 
    webSettings.setJavaScriptEnabled(true); 
    webSettings.setDomStorageEnabled(true); 
    webView.getSettings().setJavaScriptEnabled(true); 
    webView.getSettings().setDomStorageEnabled(true); 
    webView.getSettings().setPluginState(WebSettings.PluginState.ON); 
    webView.getSettings().setAppCacheEnabled(false); 
    webView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE); 
    webView.getSettings().setUseWideViewPort(true); 
    webView.getSettings().setLoadWithOverviewMode(true); 
    webView.getSettings().setBuiltInZoomControls(false); 
    webView.getSettings().setSupportZoom(false); 
    webView.getSettings().setDefaultZoom(WebSettings.ZoomDensity.FAR); 

    webView.loadUrl("file:///android_asset/01_home.html"); // does NOT work! 
    // webView.loadUrl("http://192.168.178.33/01_home.html"); // does work! 

codice di archiviazione locale nelle pagine:

// storing 
var data = document.getElementById('data').value; 
window.localStorage.setItem((1), data); 

// reading 
document.getElementById('data').value = window.localStorage.getItem(1); 
+0

discussione sulla lista degli sviluppatori Android: https://groups.google.com/forum/#!topic/ Android-developers/gssOdQLroAY –

risposta

4

ho trovato questo stesso bug. Ha funzionato su tutti i dispositivi Nexus ma su tutti i dispositivi Samsung ha perso le modifiche apportate all'utente. So che il metodo seguente è deprecato ma ha risolto il mio problema.

webview.getSettings().setDatabasePath("/data/data/" + webview.getContext().getPackageName() + "/databases/"); 
16

Non ci sono risposte a questo postato altrove Android webview & localStorage

Soluzione proposta:

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

Gr8 man. Ha funzionato come un fascino. +1 –

+1

Non funziona in Samsung A5 – Ricardo

Problemi correlati