Android WebView无法加载网页,返回白屏

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

我正在尝试使用 WebView 创建一个简单的应用程序,它应该简单地打开网站“google.com”

但是,我得到的不是网站,而是白屏,没有任何错误等。

你能看看我做错了什么吗?

我的代码:

主要活动

private fun initWebView() {

        binding.mainWebView.webViewClient = MyWebClient()
        binding.mainWebView.settings.javaScriptEnabled = true
        binding.mainWebView.settings.cacheMode = WebSettings.LOAD_DEFAULT
        binding.mainWebView.settings.domStorageEnabled = true
        binding.mainWebView.settings.blockNetworkImage = false
        binding.mainWebView.settings.blockNetworkLoads = false
        binding.mainWebView.settings.loadsImagesAutomatically = true
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            binding.mainWebView.settings.safeBrowsingEnabled = false
        }
        binding.mainWebView.settings.javaScriptCanOpenWindowsAutomatically = true
        binding.mainWebView.settings.allowFileAccess = true
        binding.mainWebView.settings.useWideViewPort = true
        binding.mainWebView.fitsSystemWindows = true
        binding.mainWebView.setLayerType(View.LAYER_TYPE_HARDWARE, null)

        binding.mainWebView.loadUrl("https://google.com")

    }

我的网络客户端



class MyWebClient : WebViewClient() {
    val TAG = "===MyWebClient"
    override fun shouldOverrideUrlLoading(view: WebView?, request: WebResourceRequest?): Boolean {
        view!!.loadUrl(request!!.url.toString())
        return true
    }

    override fun shouldOverrideUrlLoading(view: WebView?, url: String?): Boolean {
        view!!.loadUrl(url!!)
        return true
    }


    override fun onReceivedHttpError(
        view: WebView?,
        request: WebResourceRequest?,
        errorResponse: WebResourceResponse?
    ) {
        Log.i(TAG, "onReceivedHttpError: http error ")
        super.onReceivedHttpError(view, request, errorResponse)
    }

    override fun onReceivedError(
        view: WebView?,
        request: WebResourceRequest?,
        error: WebResourceError?
    ) {
        Log.i(TAG, "onReceivedError: ${error!!.errorCode}")
        Log.i(TAG, "onReceivedError: ${error.description}")
    }

    override fun onReceivedSslError(view: WebView?, handler: SslErrorHandler?, error: SslError?) {
        handler!!.proceed()
        Log.i(TAG, "onReceivedSslError: ${error}")
    }

    override fun onPageStarted(view: WebView?, url: String?, favicon: Bitmap?) {
        Log.i(TAG, "onPageStarted: started ${url}")
        super.onPageStarted(view, url, favicon)

    }


    override fun onPageFinished(view: WebView?, url: String?) {
        Log.i(TAG, "onPageFinished: finished ${url}")
        super.onPageFinished(view, url)
    }
}

Android 清单

<uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />


<application
        ...
        android:networkSecurityConfig="@xml/network_security_config"
        android:usesCleartextTraffic="true"
        ...
/>

网络安全配置

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <domain-config cleartextTrafficPermitted="true">
        <domain includeSubdomains="true">google.com</domain>
        <domain includeSubdomains="true">www.google.com</domain>
   
    </domain-config>
</network-security-config>

我使用clearTextTraffic和网络安全,以及互联网上的各种示例,但没有任何帮助我......

互联网一切正常,使用Retrofit2的请求处理顺利

此外,onReceivedError、onReceivedSslError 和 onReceivedHttpError 未捕获

仅 onPageStarted 和 onPageFinished 有效

java android kotlin android-studio android-webview
1个回答
0
投票

我找到问题所在了!

最初,我的应用程序是基于 Compose 构建的,我尝试从 View 使用 WebView。

我使用了这里的一个例子:

使用 Jetpack Compose 的 Android WebView 无法正确渲染 Mantine UI (React) 组件

并且成功了

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