1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > android WebView加载网页白屏问题优化处理

android WebView加载网页白屏问题优化处理

时间:2023-07-07 10:50:59

相关推荐

android WebView加载网页白屏问题优化处理

android WebView加载网页白屏问题优化处理

问题描述:

使用webview加载Web界面时,会出现界面白屏的情况。http下通常问题不大,通常https白屏的可能性很大,而且通常没有任何报错。

解决方案:

1、启用javascript。

2、使用setDomStorageEnabled方法来支持HTML5中的一些控件标签。【重要】

3、允许有https和http混合的内容。

4、跳过页面中的特殊url。

5、允许证书错误。

6、允许javascript错误。【重要】

话不多说开搞代码如下:

开启网络权限 :

<uses-permission android:name="android.permission.INTERNET" />

WebView webview = findViewById(R.id.viewWeb);WebSettings settings = webview.getSettings();settings.setJavaScriptEnabled(true); // 启用javascriptsettings.setDomStorageEnabled(true); // 支持HTML5中的一些控件标签settings.setBuiltInZoomControls(false); // 自选,非必要//处理http和https混合的问题if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {settings.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);} else {settings.setMixedContentMode(WebSettings.LOAD_NORMAL);}if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {// 允许javascript出错try {Method method = Class.forName("android.webkit.WebView").getMethod("setWebContentsDebuggingEnabled", Boolean.TYPE);if (method != null) {method.setAccessible(true);method.invoke(null, true);}} catch (Exception e) {// do nothing}}webview.setFocusable(true); // 自选,非必要webview.setDrawingCacheEnabled(true); // 自选,非必要webview.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY); // 自选,非必要webview.setWebChromeClient(new WebChromeClient() {@Overridepublic void onProgressChanged(WebView view, int progress) {// 显示加载进度,自选//注意textView的视图层级应该在webView上,不然就被webView遮挡住了TextView progressTV = findViewById(R.id.progressTV);progressTV.setText(String.format(Locale.CHINA, "%d%%", progress));progressTV.setVisibility((progress > 0 && progress < 100) ? View.VISIBLE : View.GONE);}@Overridepublic void onGeolocationPermissionsShowPrompt(String origin, GeolocationPermissions.Callback callback) {super.onGeolocationPermissionsShowPrompt(origin, callback);callback.invoke(origin, true, false); // 页面有请求位置的时候需要}});webview.setWebViewClient(new WebViewClient() {@Overridepublic boolean shouldOverrideUrlLoading(WebView view, String url) {if (url.startsWith("http://") || url.startsWith("https://")) {// 4.0以上必须要加view.loadUrl(url);return true;}return false;}@Overridepublic void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {//super.onReceivedSslError(view, handler, error)switch (error.getPrimaryError()) {case SslError.SSL_INVALID: // 校验过程遇到了bugcase SslError.SSL_UNTRUSTED: // 证书有问题handler.proceed();default:handler.cancel();}}});webview.loadUrl("/11705539/&;quot;);

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。