gpt4 book ai didi

android - localStorage html5 功能在三星 Android 设备上的 WebView 中不起作用

转载 作者:太空狗 更新时间:2023-10-29 13:20:20 24 4
gpt4 key购买 nike

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

它在我的 Nexus 4 (Android 4.4.4) 上运行良好,但在 Samsung Galaxy Tab 2 (Android 4.3.x) 上不起作用(= 没有任何反应,但 logcat 中也没有错误)。或者,更明确地说:在三星上,如果 html 页面是从应用程序的 Assets 文件夹中加载的,则它不起作用。如果我将页面放在服务器上,它确实有效,如下面注释掉的那一行。

但是,在 Nexus 4 上,从 file:///android_asset/加载,如果我从 file://路径在桌面浏览器(Chrome、Firefox)上加载页面,它也可以正常工作。

更新 1:我刚刚有另一个用户报告了 LG 设备的问题,所以它似乎不是三星特有的。

更新 2:从 localStorage 存储和加载值在同一页面上的所有设备上都能正常工作,但是,在不同页面之间则不然。在我的示例中,我可以在 01_home.html 上存储和检索值,但是当我转到 android_asset 文件夹中的另一个页面时,我无法再读取它(在 LG、三星设备上)。不过在 Nexus 4 上运行良好。

以下是网页 View 的设置。

    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);

最佳答案

在其他地方发布了这个问题的答案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/");
}

关于android - localStorage html5 功能在三星 Android 设备上的 WebView 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26105245/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com