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();
}
}
暂时就写到这里,有好的建议欢迎补充!