安卓Webview访问网页回退时无法退回陷入返回死循环的解决方案

1、问题描述

在测试过程中反馈的问题,webview加载的一些外部链接,点击返回键无法退出页面,不停的按返回键,就会陷入当前页面刷新的死循环。

返回键执行的逻辑如下:

@Override
public void onBackPressed() {
   if (webView.canGoBack()) {
       webView.goBack();
   } else {
       super.onBackPressed();
       finish();
   }
}

2、问题分析

经过排查并分析外部链接的特点,发现无法退出的网页被重定向了。就是当你在访问网页链接A,但是网页链接A因为网页扩展名改变、网站调整、网页迁移等原因强制跳转到了网页B,如果此时你点击进入了网页C,从网页C返回到网页B是正常的,但是从网页B返回到网页A时,网页A就会被强制跳转到网页B,每次返回都会如此,如此循环往复就会陷入一个无法退出的死循环。

3、问题解决

记录WebView开始加载的链接,在网页跳转时做一个处理,代码如下:

private String startUrl;    // 记录起始加载url

webView.setWebChromeClient(webViewWebChromeClient);

WebViewClient webViewWebViewClient = new WebViewClient() {
   @Override
   public boolean shouldOverrideUrlLoading(WebView view, String url) {
       if (startUrl != null && startUrl.equals(url)) {
           view.loadUrl(url);
       } else {
           // 系统处理
           return super.shouldOverrideUrlLoading(view, url);
       }
       return true;
   }

   @Override
   public void onPageStarted(WebView view, String url, Bitmap favicon) {
       super.onPageStarted(view, url, favicon);
       startUrl = url;
   }
};

4、小结

如果对重定向不了解,可查看百度百科。也有人说重定向问题可与前端人员商量走交互,个人不建议这么做,因为没有从根本上解决问题,最好还是做通用性适配,万一前端需要插入带有重定向网页的链接,还是要改。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值