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

来源:互联网 发布:淘宝子账号手机登录 编辑:程序博客网 时间:2024/05/16 08:12
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();      }   }

暂时就写到这里,有好的建议欢迎补充!
0 0
原创粉丝点击