我需要通过在本地和会话存储中设置一些属性来加载android中的webview。
我尝试在
webView.evaluateJavascript("window.localStorage.setItem('$key','$val1');", null)
的帮助下将值保存在本地/会话存储中,但出现以下错误。
未捕获的安全错误:无法从“窗口”读取“localStorage”属性:此文档的访问被拒绝。
webView.settings.javaScriptEnabled = true
webView.settings.domStorageEnabled = true
webView.settings.databaseEnabled = true
webView.settings.allowFileAccess = true
webView.settings.allowContentAccess = true
webView.evaluateJavascript("window.localStorage.setItem('$key','$val1');", null)
webView.loadUrl("url to load")
我还在清单中设置了
android:usesCleartextTraffic="true"
。
对于这个问题有什么建议吗?
首先添加这些行
websettings.setDomStorageEnabled(true); // Turn on DOM storage
websettings.setAllowFileAccess(true); // can read the file cache
websettings.setAppCacheEnabled(true); //Enable H5 (APPCache) caching
然后
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT) {
webView.evaluateJavascript("window.localStorage.setItem('"+ key +"','"+ val +"');", null);
} else {
webView.loadUrl("javascript:localStorage.setItem('"+ key +"','"+ val +"');");
}
我确实意识到这是一个老问题,但稍后再做。该页面尚未加载,因此它不知道它是 http:// 或 https:// 或用作更改上下文的站点名称。
在 web 视图中返回 back() 时,在页面加载时的回调中执行此操作可能会导致问题,因为返回 android 时它不会被调用,但无论如何您都需要重做注入。
Android 上的 WebView 无法通过提供的方式控制存储,这真的很不幸。