You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android触发onReceivedHttpError时如何隐藏Compose WebView

问题:在Accompanist WebView检测到错误时隐藏视图

我在Android应用中使用了Compose的Accompanist WebView,相关代码如下:

val webViewClient = remember {
    object : AccompanistWebViewClient() {

        override fun onReceivedError(view: WebView?, request: WebResourceRequest?, error: WebResourceError?) {
            println( "xxooxx onReceivedError() called with: view = $view, request = $request, error = $error" )
        }

        override fun onReceivedHttpError(view: WebView?, request: WebResourceRequest?, errorResponse: WebResourceResponse?) {
            println( "xxooxx onReceivedHttpError() called with: view = $view, request = $request, errorResponse = $errorResponse" )
        }

        override fun shouldOverrideUrlLoading(view: WebView?, request: WebResourceRequest?): Boolean {
            var shouldOverrideUrlLoading = false

            request?.let {
                if (request.isRedirect) {
                    shouldOverrideUrlLoading = true
                    context.startActivity(Intent(Intent.ACTION_VIEW, request.url))
                }
            }

            return shouldOverrideUrlLoading
        }
    }
}

val webChromeClient = remember { AccompanistWebChromeClient() }

Column(
    modifier = Modifier
        .wrapContentSize()
        .padding(top = 5.dp)
) {
    WebView(
        modifier = Modifier
            .height(60.dp)
            .fillMaxWidth(),
        state = webViewState,
        navigator = navigator,
        client = remember { webViewClient },
        chromeClient = webChromeClient,
        onCreated = { webView ->
            with(webView) {
                settings.run {
                    javaScriptEnabled = true
                    domStorageEnabled = true
                    javaScriptCanOpenWindowsAutomatically = true
                    useWideViewPort = true
                    loadWithOverviewMode = true
                    setInitialScale(1)
                    layoutAlgorithm = WebSettings.LayoutAlgorithm.NORMAL
                    scrollBarStyle = View.SCROLLBARS_INSIDE_INSET
                }
                setBackgroundColor(0)
            }
        }
    )
}

目前我的后端会返回服务器错误页面,请问是否可以在检测到错误时隐藏该WebView?如何在AccompanistWebViewClient中控制WebView的可见性?


解决方案

只需修改onReceivedHttpError方法,直接通过传入的view对象设置可见性为View.GONE即可:

override fun onReceivedHttpError(view: WebView?, request: WebResourceRequest?, errorResponse: WebResourceResponse?) {
    println( "xxooxx onReceivedHttpError() called with: view = $view, request = $request, errorResponse = $errorResponse" )

    view?.visibility = View.GONE
}

内容的提问来源于stack exchange,提问作者Hector

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 02:31:32