Android WebView 因重定向无法正常goBack()解决方案

只要将网页中的连接,比如

[html]  view plain copy 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  1. <a href=“http://xxx.com.cn”/>

直接替换为

[html]  view plain copy 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  1. <a href=“http:///xxx.com.cn/index.html”/>

即可解决该问题.

二.页面中的重定向是必须的,那么我们就需要自己维护一个webview的历史栈,根据自己的需求进行过滤跳转或者重新加载页面:

判断到当前为重定向后的链接,那么那么当回退的时候就需要忽略上一级的链接,不使用webview.goback(),移除重定向和重定向后的url,

获取到初始页面链接后自己进行loadUrl()操作.

3.还有一种方法,和方法2类似,需要自己维护webview的历史栈,但是需要前端的配合,提供js函数获取网页是否进行重定向

在webviewClient回调shouldoverloading()中过滤url时,若属于重定向的地址,则不加入栈中,回退时根据历史栈加载即可.

这里主要讲一下方法二:

首先定义一个历史栈 :

[html]  view plain copy 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  1. private ArrayList<String> loadHistoryUrls = new ArrayList<String>();

把初始页面Url加入

[html]  view plain copy 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  1. loadHistoryUrls.add(INITAL_WEB_URL);

然后加入加载的url:

[java]  view plain copy 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  1. public boolean shouldOverrideUrlLoading(WebView view,String url){

  2. //将过滤到的url加入历史栈中

  3. loadHistoryUrls.add(url);

  4. return true;

  5. }

最后在webview.goback()处理:

[java]  view plain copy 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  1. @Override

  2. public boolean onKeyDown(int keyCode, KeyEvent event) {

  3. //判断是否可以返回操作

  4. if (webView.canGoBack() && event.getKeyCode() == KeyEvent.KEYCODE_BACK) {

  5. //过滤是否为重定向后的链接

  6. if(loadHistoryUrls.size()>0&&loadUrls.get(loadHistoryUrls.size()-1).contains(“index.html”))

  7. //移除加载栈中的最后两个链接

  8. loadHistoryUrls.remove(loadHistoryUrls.get(loadHistoryUrls.size()-1));

  9. loadHistoryUrls.remove(loadHistoryUrls.get(loadHistoryUrls.size()-1));

  10. //加载重定向之前的页

  11. webview.load(loadUrls.get(loadHistoryUrls.size()-1));

  12. return true;

  13. }

  14. }

  15. }

bview.load(loadUrls.get(loadHistoryUrls.size()-1));

  1. return true;

  2. }

  3. }

  4. }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值