localStorage html5 功能在三星 Android 设备上的 WebView 中不起作用
Posted
技术标签:
【中文标题】localStorage html5 功能在三星 Android 设备上的 WebView 中不起作用【英文标题】:localStorage html5 feature not working in WebView on Samsung Android device 【发布时间】:2014-11-24 03:52:37 【问题描述】:我有一个用 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 我也有同样的问题。你找到解决方案了吗? 【参考方案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/");
【讨论】:
【参考方案2】:我发现了同样的错误。在所有 Nexus 设备上工作,但所有三星设备丢失了我的用户更改。我知道以下方法已弃用,但它解决了我的问题。
webview.getSettings().setDatabasePath("/data/data/" + webview.getContext().getPackageName() + "/databases/");
【讨论】:
以上是关于localStorage html5 功能在三星 Android 设备上的 WebView 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章
停止在三星设备上的科尔多瓦 webview 中无休止地缓冲 html5 视频
android html5 localstorage某手机从localstorage中取不到数据
在 HTML5 和 JavaScript 中循环访问 localStorage