WebView重定向和回退栈的问题,goBack不会回退的问题

原文:http://blog.csdn.net/qq_19729823/article/details/70184623

亲测很有效,原文:

1.问题描述

最近有很多人问我为什么webview加载一个网页,执行了goback网页不能返回的问题,我特此来为那些有问题的或者说有遇到这个问题不知道怎么下手解决的,可以看看下面的解答,或许会对你有所帮助吧。

2.问题原因

webview执行goback为什么不能返回上一页面,而为什么有的网页可以返回上一个页面呢?这到底是什么原因导致的这个问题呢?是因为web页面在被打开的时候是以url1打开,一部分网页是执行了重定向,那么它就会定向到另外一个url2地址上面去,导致你goback返回是返回了,当它从url3返回的时候其实并不是跳转到url2,而是直接返回到url1,而跳转到url1,又因为url1是打开后直接进行重定向的,那么就直接又跳转到url2了,所以会一直循环执行。所以你退不出去。而另外一部分是可以退回上一个页面是因为这些页面没有重定向的操作。所以会直接退回到上一个面。

3.解决方案

    既然我们知道了其中的原理,那么看看找找webview有没有什么方法可以解决方案的。

其实,解决这个问题很简单,webview的webViewClient这个玩意,这个玩意就不多说了,大家看看里面的方法就知道干什么的了。这个属性可以监听网页的刚开始打开的网页,和跳转后的网页,这两个方法分别是onPageStarred 和 shouldOverUrlLoading,这两个方法可以解决大家的问题。怎么去用。看看下面的代码

   webView.setWebViewClient(new WebViewClient() {
            private String startUrl;
            @Override
            public void onPageStarted(WebView view, String url, Bitmap favicon) {
                super.onPageStarted(view, url, favicon);
                loadingView.show();
                startUrl = url;
            }

            @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;
            }
        });

通过上面的代码就可以解决大家的问题了。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值