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

Android项目WebView显示链接而非加载页面的问题排查

Android WebView白屏仅显示链接内容问题排查

问题概述

开发了一个服务端项目,从Firebase读取域名并加载链接,但Android项目的WebView无法正常打开链接,仅白屏显示链接内容。已尝试调换loadUrl与webViewClient的设置顺序,添加android:hardwareAccelerated="false"属性,问题仍未解决。

WebActivity代码

class WebActivity : AppCompatActivity() {
    lateinit var binding: ActivityWebBinding
    val uuid = UUID.randomUUID().toString()
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityWebBinding.inflate(layoutInflater)
        setContentView(binding.root)

        val webIntent: Intent = intent
        val domen = webIntent.getStringExtra("Домен")

        val webSettings: WebSettings = binding.webView.settings
        webSettings.javaScriptEnabled = true
        binding.webView.settings.domStorageEnabled = true
        CookieManager.getInstance().setAcceptThirdPartyCookies(binding.webView,true)
        binding.webView.webViewClient = WebViewClient()
        binding.webView.loadUrl("$domen/?packageid=$packageName&usserid=$uuid&getz=Europe/Moscow&getr=utm_source=google-play&utm_medium=organic")

    }

    override fun onBackPressed() {
        if(binding.webView.canGoBack())
            super.onBackPressed()
    }
    
}

WebActivity布局代码

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".WebActivity">

    <WebView
        android:id="@+id/webView"
        android:hardwareAccelerated="false"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

排查方向与解决办法

1. 修复URL参数合法性问题

  • 首先验证domen参数是否包含http://或https://前缀:WebView无法识别不带协议的域名,会直接将其作为文本显示。添加日志打印确认参数:
    Log.d("WebActivity", "Received domain: $domen")
    
  • 自动补全协议前缀,并修正参数拼接的HTML实体问题(Kotlin字符串无需转义&):
    val validDomain = domen?.let {
        if (!it.startsWith("http")) "https://$it" else it
    } ?: ""
    val loadUrl = "$validDomain/?packageid=$packageName&usserid=$uuid&getz=Europe/Moscow&getr=utm_source=google-play&utm_medium=organic"
    binding.webView.loadUrl(loadUrl)
    

2. 修正WebView返回逻辑错误

当前onBackPressed逻辑颠倒,导致WebView无法返回上一页,正确写法:

override fun onBackPressed() {
    if (binding.webView.canGoBack()) {
        binding.webView.goBack()
    } else {
        super.onBackPressed()
    }
}

3. 补充WebView兼容性配置

添加以下配置提升页面加载兼容性:

webSettings.loadWithOverviewMode = true
webSettings.useWideViewPort = true
webSettings.allowFileAccess = true
webSettings.setSupportZoom(true)
  • 若加载HTTP链接,需在AndroidManifest.xml的<application>标签中添加:
    android:usesCleartextTraffic="true"
    

4. 监听WebView加载状态排查错误

自定义WebViewClient捕获加载异常,通过日志定位问题:

binding.webView.webViewClient = object : WebViewClient() {
    override fun onPageStarted(view: WebView?, url: String?, favicon: Bitmap?) {
        Log.d("WebView", "Start loading: $url")
    }

    override fun onPageFinished(view: WebView?, url: String?) {
        Log.d("WebView", "Finish loading: $url")
    }

    override fun onReceivedError(view: WebView?, request: WebResourceRequest?, error: WebResourceError?) {
        Log.e("WebView", "Load error: ${error?.description}")
    }
}

5. 调整硬件加速设置

布局中的android:hardwareAccelerated="false"可能导致渲染异常,建议移除该属性,若确实需要关闭硬件加速,在代码中单独设置:

binding.webView.setLayerType(View.LAYER_TYPE_SOFTWARE, null)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 19:23:09