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

Android WebView无法加载重定向URL,页面空白问题求助

Android WebView加载重定向URL显示空白问题解决

问题描述

尝试在Android WebView中加载一个内部会重定向的URL,但页面显示空白。初始URL为http://erp1.stmarysschoolbxr.org/StudentReportCard.aspx?card=admitcard&AdmNo=22L001,该URL会重定向至http://erp1.stmarysschoolbxr.org/ReportPage.aspx,WebView中显示空白,但浏览器可正常加载。原WebView代码如下:

binding.webView.getSettings().setJavaScriptEnabled(true);
binding.webView.getSettings().setLoadWithOverviewMode(true);
binding.webView.getSettings().setUseWideViewPort(true);
binding.webView.setWebViewClient(new WebViewClient() {

    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        view.loadUrl(url);

        return true;
    }

    @Override
    public void onPageFinished(WebView view, final String url) {
        hideLoader();
    }

    @Override
    public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) {
        super.onReceivedError(view, request, error);
        hideLoader();
    }
});

binding.webView.loadUrl(url);

问题原因及修复方案

  • 重定向逻辑错误:当前shouldOverrideUrlLoading返回true并手动调用loadUrl,打断了WebView默认的重定向处理流程,导致重定向页面无法正常加载。需返回false让WebView自行处理URL加载。
  • 缺失必要设置:部分网页依赖DOM存储、特定用户代理才能正常渲染,需补充相关配置。
  • 错误处理不完整:需适配不同API版本的错误回调,确保捕获加载异常。

修复后的代码示例:

// 基础设置
binding.webView.getSettings().setJavaScriptEnabled(true);
binding.webView.getSettings().setLoadWithOverviewMode(true);
binding.webView.getSettings().setUseWideViewPort(true);
// 启用DOM存储(部分网页依赖)
binding.webView.getSettings().setDomStorageEnabled(true);
// 设置匹配浏览器的用户代理(部分网站会校验)
binding.webView.getSettings().setUserAgentString("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36");

binding.webView.setWebViewClient(new WebViewClient() {

    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        // 让WebView自行处理URL加载与重定向
        return false;
    }

    @Override
    public void onPageFinished(WebView view, final String url) {
        hideLoader();
    }

    // 适配API 23+错误回调
    @Override
    public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) {
        super.onReceivedError(view, request, error);
        hideLoader();
    }

    // 适配API <23错误回调
    @Override
    public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
        super.onReceivedError(view, errorCode, description, failingUrl);
        hideLoader();
    }
});

binding.webView.loadUrl(url);

额外排查点

  • 检查网络权限:确保AndroidManifest.xml中添加了<uses-permission android:name="android.permission.INTERNET" />
  • 处理混合内容:如果网站包含HTTP/HTTPS混合资源,API 21+需启用混合内容加载:
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        binding.webView.getSettings().setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 16:25:22