请大佬解释一下Android webview 的 goBack() 和 goBackOrForward(-1)的区别

Faceless_K 2020-06-24 11:18:36
如题,我遇到个情况,假如a网页是电脑端的,在手机上访问a就会自动跳到b网页(b适配了手机端),由此导致的webview无法返回上一页,会不停的加载a->b这个过程,但是我进行了判断,如果b网址和我点击了返回键(返回键使用的是webview.goBack()方法)后的网址相同,就执行webview.goBackOrForward(-2),但是-2竟然多往前跳了一页,所以最后使用webview.goBackOrForward(-1)正常使用,但是我把点击返回键的webview.goBack()方法换成webview.goBackOrForward(-1),到了a->b这里还是无法正常返回

下面是点击返回键的处理代码

webView.setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if (event.getAction() == KeyEvent.ACTION_DOWN) {
//按返回键操作并且能回退网页
if (keyCode == KeyEvent.KEYCODE_BACK && webView.canGoBack()) {
//后退
/**
* 拿到上一页的路径,如果上一页的路径==门户首页,则直接跳转至首页(防止出现无法返回),否则直接返回上一页
* 如果是电脑页面重加载为手机页面导致无法返回,判断后直接返回之前的页面
*/
WebBackForwardList backForwardList = webView.copyBackForwardList();
if (backForwardList != null && backForwardList.getSize() != 0) {
//当前页面在历史队列中的位置
int currentIndex = backForwardList.getCurrentIndex();
WebHistoryItem historyItem = backForwardList.getItemAtIndex(currentIndex - 1);
if (historyItem != null) {
String backPageUrl = historyItem.getUrl();
if (backPageUrl.equals("首页地址")) {
Log.v("记录点:", backPageUrl);
webView.loadUrl("首页地址");
webView.postDelayed(new Runnable()
{
@Override
public void run()
{
webView.clearHistory();
}
}, 1000);
} else {
String f_url = webView.getUrl();
webView.goBack();
String b_url = webView.getUrl();
if(f_url.equals(b_url)){
webView.goBackOrForward(-1);
}
}
}
}
}else{
onBackPressed();//双击返回退出app
}
}
return true;
}
});
...全文
980 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

80,348

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧