继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

Android WebView 网址重定向影响 goBack

万千封印
关注TA
已关注
手记 90
粉丝 13
获赞 64

我们在使用 Android 自带的控件 WebView 访问某网址的时候, 网址会通过某些方式进行重定向. 这时会出现一个问题.

我们在使用 Android 自带的控件 WebView 访问某网址的时候, 网址会通过某些方式进行重定向. 这时会出现一个问题.

如下所示:
你想要在 『A网址』 中打开 『C网址』, 但实际上打开『C网址』的时候, 是需要通过 『B网址』来中转的.
就出现了下面这种情况:

A网址 -> B网址(重定向到C) -> C网址


好, 现在再来说一下我们在使用 WebView 的时候一些习惯.
如果说我们不想让用户在 WebView 中点击连接后, 让用户打开系统的浏览器进行浏览, 而是继续使用我们的 WebView 进行浏览的话.
我们一般的操作是:

[代码]java代码:

?

1
2
3
4
5
6
7
8
webView.setWebViewClient(new WebViewClient(){
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        // 控制新的连接在当前 WebView 中打开
        webView.loadUrl(url);
        return true;
    }
});



通过上面的方法,让我们的浏览器能够继续访问网页中的链接, 但上面的方式,碰到需要后退的需求,就出现了问题.

我们假设.
这时候, 用户需要从『C网址』返回到『A网址』, 用户自己本身不知道中间有『B网址』, 的存在, 用户只是希望能够在 goBack 的时候, 能够回到『A网址』
但是看上面结构式是: A网址 -> B网址(重定向到C) -> C网址.

这样可以判断出, 直接调用了 WebView.goBack() 一定会返回到『B网址』, 但是『B网址』网址的功能又是重定向到『C网址』, 所以用户看到一个现象就是, 不能 goBack 了, 每次 goBack, 就又回到『C网址』.

那上面这个问题怎么解决呢?
通过修改,我们上面override的方法.

[代码]java代码:

?

1
2
3
4
5
6
7
webView.setWebViewClient(new WebViewClient(){
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        return false; // doc上的注释为: True if the host application wants to handle the key event itself, otherwise return false(如果程序需要处理,那就返回true,如果不处理,那就返回false)
        // 我们这个地方返回false, 并不处理它,把它交给webView自己处理.
    }
});


这样就可以既实现在当前 WebView 跳转, 又能够在 goBack 时准确返回了.

原文链接:http://www.apkbus.com/blog-705730-62473.html

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP