Android WebView加载自定义网站空白,加载Google正常的问题求助
Android WebView加载自定义网站显示空白的解决方法
问题分析
你的WebView能正常加载Google但自定义网站显示空白,排除网络问题后,大概率是WebView的配置不匹配网站的运行要求,而非网站本身故障(毕竟浏览器能正常访问)。以下是具体排查和修复步骤:
1. 补充WebView必要配置
修改MainActivity.java中的WebSettings,添加现代网站常用的配置项:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); CustomWebViewClient client = new CustomWebViewClient(this); webView = findViewById(R.id.webView); webView.setWebViewClient(client); WebSettings settings = webView.getSettings(); settings.setJavaScriptEnabled(true); // 启用DOM存储(多数现代网站依赖此功能) settings.setDomStorageEnabled(true); // 允许混合内容(如果网站包含HTTP资源,Android 9+默认禁止) settings.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW); // 设置与桌面浏览器一致的User-Agent,避免网站拦截WebView请求 settings.setUserAgentString("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36"); webView.loadUrl("https://softcommerceltd.com/"); }
2. 启用错误日志排查
修改CustomWebViewClient,添加错误监听方法,获取具体错误信息:
class CustomWebViewClient extends WebViewClient{ private Activity activity; public CustomWebViewClient(Activity activity){ this.activity = activity; } @Override public boolean shouldOverrideUrlLoading(WebView webView, String url){ return false; } @Override public boolean shouldOverrideUrlLoading(WebView webView, WebResourceRequest request){ return false; } // 捕获加载错误 @Override public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) { super.onReceivedError(view, request, error); Log.e("WebViewError", "加载错误: " + error.getDescription()); } // 捕获HTTP错误 @Override public void onReceivedHttpError(WebView view, WebResourceRequest request, WebResourceResponse errorResponse) { super.onReceivedHttpError(view, request, errorResponse); Log.e("WebViewHttpError", "HTTP错误码: " + errorResponse.getStatusCode()); } }
运行后查看Logcat中的错误信息,能精准定位问题(比如证书错误、资源加载失败等)。
3. 配置明文流量允许(若需)
如果网站内部包含HTTP协议的资源,在AndroidManifest.xml的<application>标签中添加属性:
<application ... android:usesCleartextTraffic="true"> ... </application>
4. 启用WebView调试
添加调试开关,可通过Chrome浏览器查看WebView的JS控制台错误:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 开启WebView调试(仅在测试环境使用) if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { WebView.setWebContentsDebuggingEnabled(true); } // 其他代码... }
打开Chrome浏览器访问chrome://inspect,连接设备后即可调试WebView,查看JS报错或资源加载情况。
关于网站本身的问题
从你的描述来看,网站在浏览器能正常访问,说明网站本身无重大故障。如果上述配置仍无法解决,可检查网站是否有针对WebView的UA拦截逻辑,或是否依赖某些浏览器专属API(WebView未实现)。
内容的提问来源于stack exchange,提问作者Asikur Rahman
相关产品推荐
相关产品推荐

