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
相关产品推荐
相关产品推荐

