[在某些设备上的Webview上加载url时,我遇到了几个问题:例如一般的模拟器(Nexus 5,Android API 21)和实际设备(华为P30,Android 10)。
编辑:我正在使用minSDK19。URL是一个https方案。
binding.webview.apply {
settings.javaScriptEnabled = true
settings.loadWithOverviewMode = true
settings.domStorageEnabled = true
settings.databaseEnabled = true
settings.setRenderPriority(WebSettings.RenderPriority.HIGH)
settings.cacheMode = WebSettings.LOAD_CACHE_ELSE_NETWORK
settings.setAppCacheEnabled(true)
settings.layoutAlgorithm = WebSettings.LayoutAlgorithm.NARROW_COLUMNS
settings.useWideViewPort = true
settings.enableSmoothTransition()
webViewClient = object : WebViewClient() {
override fun onPageStarted(view: WebView?, url: String?, favicon: Bitmap?) {
writeData(getString(XXX).toString())
super.onPageStarted(view, url, favicon)
binding.layoutProgress.progressLayout.show()
}
override fun onPageFinished(view: WebView?, url: String?) {
super.onPageFinished(view, url)
binding.layoutProgress.progressLayout.invisible()
}
}
}
我正在localStorage上写一些东西,需要通过javascript才能具有浏览器才能加载。我不确定这是否是问题...
private fun writeData(value: String) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
binding.webview.evaluateJavascript(
"localStorage.setItem('$XXX','$value');",
null
)
} else {
binding.webview.loadUrl("javascript:localStorage.setItem('$XXX','$value');")
}
}
未加载的设备上显示的chromium
错误是:
"Uncaught SecurityError: Failed to read the 'localStorage' property from 'Window': Access is denied for this document.",
"Unrecognized Content-Security-Policy directive 'navigate-to'. ", source: url.com (0)
"Unrecognized Content-Security-Policy directive 'navigate-to'. ", source: url.com (0)
"The key "shrink-to-fit" is not recognized and ignored.", source: url.com (5)
"Refused to load the stylesheet 'https://fonts.googleapis.com/css?family=Source+Code+Pro:300,600&display=swap' because it violates the following Content Security Policy directive: "style-src 'self' 'unsafe-inline' https://widget.freshworks.com blob:". ", source: url.com (11)
"Uncaught SyntaxError: Use of const in strict mode.", source: url.something.js (21)
非常感谢。
如果想要一致性和可靠性,请尝试GeckoView。它是Mozilla Firefox团队构建的替代WebView库,以使页面在所有设备上的行为相同。
不确定在这些设备上是否会遇到相同的铬错误。
[目前在Android 4.3 +,API 18+上受支持
这可能是因为使用webview加载了URL。
将@ xml / network_security_config添加到您的资源中:
<network-security-config>
<base-config cleartextTrafficPermitted="true">
<trust-anchors>
<certificates src="system" />
<certificates src="user"/>
</trust-anchors>
</base-config>
</network-security-config>
将此安全配置添加到清单中,如下所示:
<application
...
android:networkSecurityConfig="@xml/network_security_config"
...>
...
</application>