Android(安卓)WebView由于重定向造成的goBack()无效的问题解决
16lz
2021-01-26
最近项目中WebView返回时需要一级一级返回,就使用到WebView.goBack()方法。可当加载重定向的URL,出现了不能正常退出WebView的问题。
问题描述
比如,加载此重定向URL:http://news.cctv.com/m/la/index.shtml?id=ARTIPelLhipU21KF1nsbxpA7180816
在设置WebView的setWebViewClient()时,重写了shouldOverrideUrlLoading()、onReceivedSslError()、onPageFinished()等方法,如下:
//如果不设置WebViewClient,请求会跳转系统浏览器 webView.setWebViewClient(new WebViewClient(){ //覆写shouldOverrideUrlLoading实现内部显示网页 @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); return true; } //重写此方法可以让webview处理https请求 @Override public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) { LogUtil.d(TAG,"onReceivedSslError"+error.toString()); handler.proceed();// 接受所有网站的证书;2.handler.cancel()-Android默认的处理方式;3.handleMessage(Message msg); // 进行其他处理 } @Override public void onPageFinished(WebView view, String url) { LogUtil.d(TAG,"onPageFinished url = "+url); ... super.onPageFinished(view, url); } });
返回时,
@Override public boolean onKeyDown(int keyCode, KeyEvent event) { if(keyCode==KeyEvent.KEYCODE_BACK) { if(webView.canGoBack()){ //当WebView不是处于第一页面时,返回上一个页面 webSettings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); webView.goBack(); return true; }else { //当WebView处于第一页面时,直接退出 finish(); } } return super.onKeyDown(keyCode, event); }
当加载重定向的URL时,点击物理返回按键时webview.canGoBack()判断为true,即就调用webview.goBack()方法,这时shouldOverrideUrlLoading()方法中return true,表示是程序自己来处理goBack()后的URL加载,当加载重定向URL会变成一个死循环,不会正常退出WebView。
解决方法
@Override public boolean shouldOverrideUrlLoading(WebView view, String url) {// view.loadUrl(url);// return true; LogUtil.d(TAG,"shouldOverrideUrlLoading"); return false; }
shouldOverrideUrlLoading()方法中return false,表示就会交给WebView来进行处理,WebView内部识别出重定向URL并进行finish操作。
最终,问题得以解决。
更多相关文章
- android 启动 service 的两种方法
- 准备☞Android(安卓)异步消息分发机制
- Android属性动画之ObjectAnimator控制
- Android(安卓)的 Application 初始化
- Android利用activity-alias动态更新图标icon,标题label
- delphi xe5 android iny绿色版+最新SDK/NDK安装方法
- 阿拉伯语系处理方法
- 给 Android(安卓)开发者的 Flutter 指南
- Android的APK文件的反编译方法