2014-09-29 11 views
9

Ich habe eine HTML5-Anwendung, die ich mit einem WebView umhüllen. Zum Speichern und Abrufen von Benutzereingabewerten zwischen Seiten verwende ich die localStorage html5-Funktion.localStorage html5 Funktion funktioniert nicht in WebView auf Samsung Android-Gerät

Es funktioniert gut auf meinem Nexus 4 (Android 4.4.4), aber es funktioniert nicht auf Samsung Galaxy Tab 2 (Android 4.3.x) (= nichts passiert, aber auch kein Fehler in logcat). Oder, um klarer zu sein: auf Samsung, es funktioniert nicht, wenn die HTML-Seiten aus dem Asset-Ordner der App geladen werden. Es funktioniert aber, wenn ich die Seiten auf einen Server setze, wie unten in der Outcomment-Zeile.

Allerdings, auf Nexus 4, Laden von Datei: /// android_asset/und auch wenn ich die Seiten auf einem Desktop-Browser (Chrome, Firefox) von file: // Pfad laden, es funktioniert auch.

Update 1: Ich hatte gerade einen anderen Benutzer, der das Problem mit einem LG-Gerät gemeldet, so dass es nicht scheint, Samsung spezifisch zu sein.

Update 2: Das Speichern und Laden des Werts von localStorage funktioniert auf allen Geräten auf derselben Seite, jedoch nicht zwischen verschiedenen Seiten. In meinem Beispiel kann ich den Wert auf 01_home.html speichern und abrufen, aber wenn ich auf eine andere Seite im Ordner android_asset gehe, kann ich es nicht mehr lesen (auf LG, Samsung-Geräten). Funktioniert aber gut auf Nexus 4.

Im Folgenden finden Sie die Einstellungen der Webansicht.

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! 

Lokale Speicherung Code auf den Seiten:

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

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

Thema auf Android-Entwickler-Liste: https://groups.google.com/forum/#!topic/ android-developers/gssOdQLroAY –

Antwort

4

fand ich diesen gleichen Fehler. Arbeitete auf allen Nexus-Geräten, aber alle Samsung-Geräte verloren meine Benutzeränderungen. Ich weiß, die folgende Methode ist veraltet, aber es löste mein Problem.

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

Es gibt Antworten auf diese an anderer Stelle geschrieben Android webview & localStorage

Lösung vorgeschlagen:

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 Mann. Lief wie am Schnürchen. +1 –

+1

funktioniert nicht in Samsung A5 – Ricardo

Verwandte Themen