【发布时间】:2025-12-14 14:00:02
【问题描述】:
我有一个用 WebView 包装的 html5 应用程序。为了在页面之间存储和检索用户输入值,我使用 localStorage html5 功能。
它在我的 Nexus 4 (Android 4.4.4) 上运行良好,但在三星 Galaxy Tab 2 (Android 4.3.x) 上无法运行(= 没有任何反应,但 logcat 也没有错误)。 或者,更清楚地说:在三星上,如果 html 页面是从应用程序的资产文件夹中加载的,则它不起作用。但是,如果我将页面放在服务器上,它确实可以工作,如下面的注释行。
但是,在 Nexus 4 上,从 file:///android_asset/ 加载,如果我从 file:// 路径加载桌面浏览器(Chrome、Firefox)上的页面,它也可以正常工作。
更新 1:我刚刚有另一个用户报告了 LG 设备的问题,所以它似乎不是三星特有的。
更新 2:从 localStorage 存储和加载值在同一页面上的所有设备上都可以正常工作,但在不同页面之间却不行。在我的示例中,我可以存储和检索 01_home.html 上的值,但是当我转到 android_asset 文件夹中的另一个页面时,我无法再读取它(在 LG、三星设备上)。不过在 Nexus 4 上运行良好。
以下是网页视图的设置。
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 开发者列表主题:groups.google.com/forum/#!topic/android-developers/gssOdQLroAY
-
我也有同样的问题。你找到解决方案了吗?
标签: android html webview local-storage samsung-mobile