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

Android API 21环境下Webview显示空白/白屏问题求助

Android WebView API 21(Android 5.0)空白问题排查与修复

核心原因

  • Android 5.0(API 21)系统原生WebView默认禁止混合内容加载:如果你的网页是HTTPS协议,内部嵌入了HTTP协议的静态资源(图片、脚本、样式等),会被系统直接拦截,导致页面无法渲染。
  • 低版本WebView对新前端语法支持不足:API 21自带的WebView内核版本较低,不支持ES6及以上的JS语法,如果前端页面没有做ES5降级适配,会出现JS执行报错,页面空白。
  • 明文请求或证书校验失败:如果加载的是HTTP明文地址,或者网页使用了自签名SSL证书,低版本WebView会默认拦截请求。

修复方案

1. 新增混合内容加载权限

在WebSettings配置中添加混合内容兼容模式,允许HTTPS页面加载HTTP资源:

settings.setMixedContentMode(WebSettings.MIXED_CONTENT_COMPATIBILITY_MODE);

2. 适配明文/自签名证书场景

如果加载HTTP地址,确认AndroidManifest.xml的application节点已配置:

android:usesCleartextTraffic="true"

如果是测试环境使用自签名证书,可以临时重写SSL错误回调(生产环境请添加证书校验逻辑,避免安全风险):

@Override
public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
    handler.proceed();
}

3. 修复JS语法兼容问题

要求前端项目打包时开启ES5降级适配,或者引入Crosswalk内核替换系统原生WebView,解决低版本内核特性不足的问题。

修改后完整代码

webClient = findViewById(R.id.WebView);
WebSettings settings = webClient.getSettings();
settings.setJavaScriptEnabled(true);
settings.setAllowContentAccess(true);
settings.setDomStorageEnabled(true);
// 新增:适配API 21混合内容加载
settings.setMixedContentMode(WebSettings.MIXED_CONTENT_COMPATIBILITY_MODE);
// 可选:开启缓存提升加载性能
settings.setCacheMode(WebSettings.LOAD_DEFAULT);
settings.setAppCacheEnabled(true);

webClient.setWebViewClient(new WebViewClient() {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url){
        view.loadUrl(url);
        return false;
    }

    // 可选:测试环境适配自签名证书,生产环境请删除或补充证书校验
    @Override
    public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
        handler.proceed();
    }
});
webClient.loadUrl(url);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 05:57:03