Android WebView无法加载特定站点、部分站点跳转默认浏览器问题求助
问题排查与解决方案
核心问题原因
- 未配置自定义
WebViewClient:WebView默认会将页面跳转、重定向请求交给系统浏览器处理,这就是访问不带www的域名时跳转默认浏览器的直接原因 - 未开启JavaScript支持:你代码中注释了JS开启逻辑,绝大多数现代前端站点依赖JS完成页面渲染,未开启JS会直接导致白屏
- 缺少必要的WebView配置:包括DOM存储许可、混合内容加载许可等,都会导致部分站点无法正常加载
修复后完整代码示例
import android.os.Bundle; import android.util.Log; import android.webkit.WebResourceError; import android.webkit.WebResourceRequest; import android.webkit.SslErrorHandler; import android.net.http.SslError; import android.webkit.WebSettings; import android.webkit.WebView; import android.webkit.WebViewClient; import androidx.appcompat.app.AppCompatActivity; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); WebView mywebview = findViewById(R.id.webView); // 开启WebView远程调试(可选,Chrome访问chrome://inspect可查看WebView日志、网络请求) WebView.setWebContentsDebuggingEnabled(true); WebSettings webSettings = mywebview.getSettings(); // 开启JavaScript支持,必须配置 webSettings.setJavaScriptEnabled(true); // 开启DOM存储,支持站点使用localStorage等缓存能力 webSettings.setDomStorageEnabled(true); // 允许HTTPS站点加载HTTP资源,Android 9+默认禁止 webSettings.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW); // 设置自定义WebViewClient,所有页面跳转均在WebView内部处理 mywebview.setWebViewClient(new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) { view.loadUrl(request.getUrl().toString()); return true; } // 捕获加载错误,可通过日志定位具体问题 @Override public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) { super.onReceivedError(view, request, error); Log.e("WebView加载错误", "错误信息:" + error.getDescription() + ",错误码:" + error.getErrorCode()); } // 测试环境如果使用自签名SSL证书可取消下方注释,生产环境必须删除避免安全风险 /* @Override public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) { handler.proceed(); } */ }); mywebview.loadUrl("https://example.com/j2f6/xaph1.html"); } }
额外排查建议
- 如果测试站点为HTTP协议,需要在AndroidManifest.xml的
<application>节点添加android:usesCleartextTraffic="true"属性,Android 9及以上系统默认禁止HTTP请求 - 可通过之前提到的远程调试功能查看WebView的控制台输出、网络请求状态,快速定位白屏的具体原因
内容的提问来源于stack exchange,提问作者Aquaholic
相关产品推荐
相关产品推荐

