Android 解决WebView重定向

释放双眼,带上耳机,听听看~!

调用webviewd的goBack(),goForward()有时候出现的并不是我们想象中的页面,可能连续调了两次goBack才能回到原来的页面。有时候url没错,页面莫名其妙的error。这些往往都是由于网页自身重定向引发的。
拿携程的网址举例子http://m.ctrip.com/
通过对webView开启过的页面进行打印

        webView.setWebViewClient(new WebViewClient(){
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
Log.e("kid","onPageStarted="+url);
}
});

打印结果
可以看到,onPageStarted不止调用了一次。这也就是我们goBack的时候,要调用几次才能退回的原因了。
我们还看到url出现ctrip://开头的,不知道什么鬼的东东,这个是携程自己的协议,这跟我们自己公司做H5页面,自己定义业务逻辑是一样的(对于android)。同样一段,复制黏贴到ios的浏览器上,发现这一段协议可以弹出一个系统弹框,询问是否要跳转到携程App。所以也有可能是专门给ios做的重定向。这里我们就忽略过了。我们只是不希望这个网站的重定向,影响到我们的正常浏览,比如时不时来个error页面。
解决方法:
webView有一个拦截网络请求的方法,调用在onPageStart之前——shouldOverrideUrlLoading,返回true,则拦截,false则不拦截。我们要做的是,在前进,返回逻辑的时候,讲业务逻辑交给网页本身处理,不拦截它的操作,网页自身会判断你goBack要回到哪里。但要拦截网页自定义的协议,不然进入start Load 这个url之后,比如进入error页面。

        webView.setWebViewClient(new WebViewClient(){
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if(!(url.startsWith("http")||url.startsWith("https"))){
return true;
}
return false;
}
});

人已赞赏
Android文章

Android WebView上滑隐藏头部,下滑显示头部

2020-4-5 9:48:05

Android文章

Android 等级经验进度seekbar效果

2020-4-5 11:03:30

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
有新消息 消息中心
搜索