三星Android设备上的WebView中不能使用localStorage html5function

我有一个HTML5应用程序,我用WebView包装。 要存储和检索页面之间的用户input值,我使用localStorage html5function。

它适用于我的Nexus 4(Android 4.4.4),但它不适用于三星Galaxy Tab 2(Android 4.3.x)(=没有任何反应,但也没有在logcat中的错误)。 或者,要更清楚一点: 在三星,如果HTML页面从应用程序的资产文件夹中加载,则不起作用 。 它确实工作,但如果我把页面放在服务器上,如下面的评论行。

但是,在Nexus 4上,从file:/// android_asset /加载,并且如果从file://path加载桌面浏览器(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); 

Solutions Collecting From Web of "三星Android设备上的WebView中不能使用localStorage html5function"

我发现了同样的错误。 在所有的Nexus设备上工作,但所有的三星设备失去了我的用户更改。 我知道下面的方法已被弃用,但它解决了我的问题。

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

有其他的Android webview&localStorage张贴的答案

解决scheme提出

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