localStorage html5功能无法在Samsung Android设备上的WebView中运行

Mat*_*adt 9 html5 android webview local-storage samsung-mobile

我有一个html5应用程序,我用WebView包装.要在页面之间存储和检索用户输入值,我使用localStorage html5功能.

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

但是,在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!
Run Code Online (Sandbox Code Playgroud)

页面中的本地存储代码:

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

// reading
document.getElementById('data').value = window.localStorage.getItem(1);
Run Code Online (Sandbox Code Playgroud)

Dav*_*nce 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/");
}
Run Code Online (Sandbox Code Playgroud)


use*_*101 4

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

webview.getSettings().setDatabasePath("/data/data/" + webview.getContext().getPackageName() + "/databases/");
Run Code Online (Sandbox Code Playgroud)