Android Webview仅在某些设备上加载

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

[在某些设备上的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)

非常感谢。

android kotlin webview chromium
2个回答
1
投票

如果想要一致性和可靠性,请尝试GeckoView。它是Mozilla Firefox团队构建的替代WebView库,以使页面在所有设备上的行为相同。

不确定在这些设备上是否会遇到相同的铬错误。

[目前在Android 4.3 +,API 18+上受支持

https://wiki.mozilla.org/Mobile/GeckoView


0
投票

这可能是因为使用webview加载了URL。

  1. 将@ 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>
    
  2. 将此安全配置添加到清单中,如下所示:

    <application
        ...
        android:networkSecurityConfig="@xml/network_security_config"
        ...>
    
        ...
    </application>
    
© www.soinside.com 2019 - 2024. All rights reserved.