WebView无法显示KOLIBRI登录页,设置WebViewClient后仅加载图标
问题解决方案
根因说明
配置默认WebViewClient后加载异常的核心原因是:自行设置WebViewClient后,WebView将使用内置内核加载页面,缺少内网站点所需的必要配置项;未配置WebViewClient时,WebView会调用系统默认浏览器加载页面,系统浏览器默认已开启混合内容、DOM存储等权限,因此可以正常加载。
修复步骤
1. 补充WebSettings必要配置
在现有WebSettings配置后添加以下代码:
WebSettings webSettings = myWebView.getSettings(); // 已有配置保留 webSettings.setJavaScriptEnabled(true); // 新增配置 webSettings.setDomStorageEnabled(true); // 支持DOM存储,多数站点必备 webSettings.setAllowFileAccess(true); // 允许访问本地文件 webSettings.setLoadsImagesAutomatically(true); // 自动加载图片 // 允许HTTP站点加载HTTPS混合资源,内网站点普遍存在混合内容场景 webSettings.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
2. 重写WebViewClient的核心方法
不要直接使用默认无实现的WebViewClient,自行实现必要的跳转、异常处理逻辑:
myWebView.setWebViewClient(new WebViewClient() { // 适配Android 7.0+的页面跳转逻辑,所有跳转均在当前WebView内加载 @Override public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) { view.loadUrl(request.getUrl().toString()); return true; } // 兼容Android 7.0以下版本的跳转逻辑 @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); return true; } // 若内网存在自签证书的HTTPS跳转,可添加此方法忽略SSL校验(公网环境不建议使用) @Override public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) { handler.proceed(); } });
3. 验证加载效果
完成上述配置后重新运行应用,即可保留WebViewClient配置的同时正常加载内网站点。
额外排查手段
如果修改后仍加载异常,可开启WebView调试能力排查具体错误:
在loadUrl前添加代码:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { WebView.setWebContentsDebuggingEnabled(true); }
之后将手机连接电脑,打开Chrome浏览器访问chrome://inspect即可查看WebView的控制台报错、网络请求等信息,定位具体问题。
内容的提问来源于stack exchange,提问作者Michael
相关产品推荐
相关产品推荐

