2014-09-29 104 views
9

我有一個html5應用程序,我用WebView包裝。爲了存儲和檢索頁面之間的用戶輸入值,我使用了localDirectory html5功能localStorage html5功能不能在三星Android設備上的WebView工作

它適用於我的Nexus 4(Android 4.4.4),但它不適用於Samsung Galaxy Tab 2(Android 4.3.x)(=沒有任何反應,但在logcat中也沒有錯誤)。 或者,更清楚的是:在Samsung上的,如果html頁面從應用程序的資產文件夾中加載,則不起作用。如果我把這些頁面放在服務器上,它可以工作,如下面的註釋行。

但是,在Nexus 4上,從file:/// android_asset /加載,以及如果我從file://路徑加載桌面瀏覽器(Chrome,Firefox)上的頁面,它也可以工作。

更新1:我剛剛有另一位用LG設備報告問題的用戶,所以它似乎不是三星特定的。

更新2:從localStorage存儲和加載值可以在同一頁面上的所有設備上正常工作,但不在不同頁面之間。在我的示例中,我可以存儲和檢索01_home.html上的值,但是當我轉到android_asset文件夾中的另一頁時,我無法再閱讀它(在LG,三星設備上)。雖然在Nexus 4上運行良好。

以下是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! 

本地存儲代碼的網頁:

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

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

主題的Android開發者名單:https://groups.google.com/forum/#!topic/ android-developers/gssOdQLROAY – 2014-09-30 09:56:42

回答

4

我發現這個同樣的錯誤。適用於所有Nexus設備,但全部三星設備丟失了我的用戶更改。我知道下面的方法是已棄用但它解決了我的問題。

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

有答案,這樣Android webview & localStorage

提出的解決方案的其他地方發佈:

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。像魅力一樣工作。 +1 – 2015-03-20 17:23:33

+1

不適用於Samsung A5 – Ricardo 2017-02-15 16:06:43

相關問題