webview 中文文档 下载 App

应用内网页白屏排查清单——9 步从最可能到最不可能

Step 1:WebView 版本是不是过旧

最常见原因。先确认当前 WebView 版本:

  1. 设置 → 应用 → 搜 Android System WebView → 看版本号
  2. 对比 Chromium 主线版本(2026 年 Chromium 在 M133+)
  3. 落后 3 个大版本以上 → 更新 WebView 再试

怎么更:去 Google Play / 厂商应用市场搜 "Android System WebView" 点更新。

Step 2:是不是开发者选项里切了奇怪的 provider

  1. 进开发者选项 → WebView 实现
  2. 看当前选中的是谁
  3. 如果选的是厂商自研 WebView(小米 HyperOS / 华为 ArkWeb)且你怀疑是它的问题 → 切到 Chrome 试试(如果设备允许)

Step 3:JS 被关了

在代码里确认:

webSettings.setJavaScriptEnabled(true);

默认 false——忘了开 → 现代网页全白屏。

Step 4:硬件加速副作用

某些 GPU 机型上硬件加速 WebView 会导致渲染异常。试试:

webView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);

如果关了硬件加速就好了,那是 GPU 驱动和 WebView 的兼容问题——等厂商 OTA 更新 GPU 驱动,或在 App 里保留软件渲染 fallback。

Step 5:混合内容被拦截

HTTPS 页面里加载 HTTP 资源(图片、JS)被 WebView 拦截。临时排查:

webSettings.setMixedContentMode(WebSettings.MIXED_CONTENT_COMPATIBILITY_MODE);

如果这么改就好,别直接上线——应该去修网页,把所有 HTTP 资源改成 HTTPS。

Step 6:权限被拒导致静默失败

如果网页需要相机 / 麦克风 / 定位,而你的 App 没正确处理 onPermissionRequest:

Step 7:HarmonyOS NEXT 特有

HarmonyOS NEXT 上 Chromium 特有 API 不支持:

Step 8:shouldOverrideUrlLoading 返回值错误

// ❌ 错误:返回 true → WebView 不加载任何东西
webView.setWebViewClient(new WebViewClient() {
    @Override
    public boolean shouldOverrideUrlLoading(WebView v, WebResourceRequest r) {
        return true;
    }
});

// ✅ 正确:返回 false → WebView 正常加载
return false;

Step 9:WebView 进程崩溃没恢复

WebView 是独立进程,渲染进程崩溃后 App 可能不知道。用远程调试看 Render 进程是否还活着。

→ 继续:扫码失败(blob: URL 被拦截)怎么办