也谈谈webview因为重定向而无法goBack的问题

String str="http://www.baidu.com";
Log.i("TAG","str="+str);
webView.loadUrl(str);
如以上的代码,
 
  
你会发现会一直无法finish掉当前页面,这是为什么呢?
经过调试,你会发现weBView.canGoBack一直为true,所以一直无法执行finish()的操作。
再仔细一看,http://www.baidu.com并不是正确的网址,正确的是https://www.baidu.com。
而使用webview加载http://www.baidu.com网址,会通过http://n.cosbot.cn/cl/html/bd1.html网址重定向到https://www.baidu.com。
因此cangoBack一直为true,就不难理解了,返回到http://n.cosbot.cn/cl/html/bd1.html,又重回到https://www.baidu.com。
那如何解决这个问题,如果url没错误,可以给webview设置:(如果不这样设置,你会发现网页返回到第一个网页,有可能加载最早的url,导致页面一直无法finish掉
如果你用第三方的网页,而第三方网页有重定向的url:

就只能在goBack()中进行处理:
    public void goBack() {
      // 获取历史列表
      WebBackForwardList mWebBackForwardList = webview
            .copyBackForwardList();
      // 判断当前历史列表是否最顶端,其实canGoBack已经判断过
      if (mWebBackForwardList.getCurrentIndex() > 0) {

         // 获取历史列表
         String historyUrl = mWebBackForwardList.getItemAtIndex(
               mWebBackForwardList.getCurrentIndex() - 1).getUrl();
         Log.e("历史记录", "historyUrl = " + historyUrl);
//在以下代码中,找出重定向链接,进行处理,一般是把重定向链接删除,可以参考下面图片
//       if (historyUrl.equals("http://n.cosbot.cn/cl/html/bd1.html"))//此是百度的重定向域名,如果重新回到百度,则让它跳转首页
//       {
//          Log.i("TAG","I come here!");
//          main.getViewPager().setCurrentItem(0);
//       }

         // 按照自己规则检查是否为可跳转地址
         // 注意:这里可以根据自己逻辑循环判断,拿到可以跳转的那一个然后webView.goBackOrForward(steps)
         webview.goBack();

      }
   }

暂时就写到这里,有好的建议欢迎补充!

你可能感兴趣的:(也谈谈webview因为重定向而无法goBack的问题)