Android Webview -> 在 webview 的 localStorage 中设置值时未捕获安全错误

问题描述 投票:0回答:2

我需要通过在本地和会话存储中设置一些属性来加载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"

对于这个问题有什么建议吗?

javascript android dom webview android-webview
2个回答
0
投票

首先添加这些行

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 +"');");
}

0
投票

我确实意识到这是一个老问题,但稍后再做。该页面尚未加载,因此它不知道它是 http:// 或 https:// 或用作更改上下文的站点名称。

在 web 视图中返回 back() 时,在页面加载时的回调中执行此操作可能会导致问题,因为返回 android 时它不会被调用,但无论如何您都需要重做注入。

Android 上的 WebView 无法通过提供的方式控制存储,这真的很不幸。

© www.soinside.com 2019 - 2024. All rights reserved.