HTML5 localStorage不能在Android WebView上工作
HTML5 localStorage not working on Android WebView
我正在为客户端制作移动应用程序,使用Buzztouch,所以html页面不在应用程序内,它们是通过JSON从服务器加载的。
客户端希望在应用程序上有一个屏幕,用户可以将详细信息输入时间表并将其存储在手机上。
我试图使用localStorage做到这一点,并设置了所有的权限,等,但我得到以下错误时,试图读取或写入页面上的localStorage:
"SecurityError: Failed to read the localStorage; "属性"窗口":拒绝访问此文档。"
这是在运行Android版本5的华硕Memopad上。
下面是manifest文件中的权限:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.WRITE_CONTACTS" />
以下是webView的设置:
webView.getSettings().setDatabaseEnabled(true);
webView.getSettings().setDatabasePath("/data/data/" + webView.getContext().getPackageName() + "/databases/");
webView.getSettings().setDomStorageEnabled(true);
我在旧的Android平板电脑上尝试了完全相同的代码,运行Android版本2.3,我没有得到这个错误,localStorage工作正常。
我也在iPhone上试过,效果很好。
我甚至尝试将代码复制到一个标准网页上,它在平板电脑的浏览器中运行良好,但webView仍然不喜欢它。
我在网上找了几个小时,到目前为止我还没有找到解决这个问题的方法。
任何想法?
更新:
这里是一些jQuery代码,它的目的是检查本地存储是否可用,并加载一个项目,如果它被设置。
try {
if(typeof(Storage) !== "undefined") {
try {
if(localStorage.getItem("storage") !== null) {
storage = JSON.parse(localStorage.getItem("storage"));
}
} catch(e) {
$("#error").html($("#error").html() + " " + e + "<br>");
$("#error").css("display", "block");
}
} else {
$("#log").html("HTML5 Storage is not working.");
}
} catch(e) {
$("#error").html($("#error").html() + " " + e + "<br>");
$("#error").css("display", "block");
}
这是在加载时抛出错误的原因,因为这是在$(document)中。准备好部分。
此错误实际上不是由于缺乏任何java端权限,而是由于较新的WebView版本改进了web安全模型。在没有看到实际代码的情况下,很难判断应用程序做错了什么,但我的猜测是,您可能试图从不同来源的页面访问localStorage。例如,如果你使用loadData
作为初始页面,然后从服务器加载其他部分,这些代码可以有不同的来源。
我终于设法解决了这个问题。
我唯一能让它工作的方法,无论我尝试什么,就是在应用程序中包含html文件,而不是通过Buzztouch的控制面板,然后加载它。
这个html文件现在正确加载,没有localStorage错误。
- window.onload没有'无法在Android WebView中工作
- webview日期选择器可以在android模拟器中工作,但不能在设备上工作
- 字符串替换不'当通过android webView JavascriptInterface传递字符串时无法工作
- 从android webview调用时getJSON不工作
- Google Analytics无法在iOS应用程序的Webview中工作
- Javascript不能在WebView活动中工作
- android webview javascript不与loadDataWithBaseUrl工作
- Android WebView -可以在浏览器中工作,但不能在WebView中工作
- Android WebView getElementById('math')不能动态工作
- webview.url在某些android设备上不工作(在Titanium Appcelerator中)
- Android开发:WebView JavaScript不工作
- Javascript不能在Android 4.4.4以下的WebView中工作
- webview loadUrl停止工作后,控制谷歌表单得到焦点
- javascript不能在android的4.4.3 webview中工作
- Webview javascript推送值到前一页不工作
- HTML5 localStorage不能在Android WebView上工作
- webview.evalJS().通过在HTML文件中传递参数来调用js函数时不工作
- Android webview在渲染html时不工作
- 从Android Webview获取HTML不工作
- 家长在webview Android中不工作