最近项目中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操作。

 

最终,问题得以解决。

 

 

 

更多相关文章

  1. android 启动 service 的两种方法
  2. 准备☞Android(安卓)异步消息分发机制
  3. Android属性动画之ObjectAnimator控制
  4. Android(安卓)的 Application 初始化
  5. Android利用activity-alias动态更新图标icon,标题label
  6. delphi xe5 android iny绿色版+最新SDK/NDK安装方法
  7. 阿拉伯语系处理方法
  8. 给 Android(安卓)开发者的 Flutter 指南
  9. Android的APK文件的反编译方法

随机推荐

  1. Android动态刷新listview中的数据
  2. Not targeting the latest versions of A
  3. 44、头像上传
  4. Android实现一个选择器-recycleview滚动
  5. 【Android】异步加载图片-------不错的思
  6. Android(安卓)md5加密
  7. Android开启/关闭/监听 飞行模式
  8. android 异步图片处理 工具类
  9. 关于Android短信拦截(三)
  10. Android图片圆角 用简单的方法实现