WebView设置setWebViewClient时的执行顺序

webView.setWebViewClient(new WebViewClient() {
            @Override
            public boolean shouldOverrideUrlLoading(WebView webView, String s) {
                LogUtils.e("shouldOverrideUrlLoading 1: " + s);
                return super.shouldOverrideUrlLoading(webView, s);
            }

            @Override
            public boolean shouldOverrideUrlLoading(WebView webView, WebResourceRequest webResourceRequest) {
                isRedirection = true;
                LogUtils.e("shouldOverrideUrlLoading 2: " + webResourceRequest.getUrl());
               
                return super.shouldOverrideUrlLoading(webView, webResourceRequest);

            }

            @Override
            public void onPageStarted(WebView webView, String s, Bitmap bitmap) {
                isRedirection = false;
                super.onPageStarted(webView, s, bitmap);
                LogUtils.e("onPageStarted: " + s);
            }

            @Override
            public void onPageFinished(WebView webView, String s) {
                super.onPageFinished(webView, s);
                LogUtils.e("onPageFinished:" + s);
               
            }
        });

有人说shoulde方法执行在api23,但是如果只是设置了webviewClient的话,不改变源代码,只是打印,发现两个shouldOverrideUrlLoading方法都执行了,执行的顺序

shouldOverrideUrlLoading不重写时执行顺序

如果时webview.loadrl():

onPageStarted: http://www.hao123.com/

shouldOverrideUrlLoading 2: http://www.hao123.com/wise_test.php

 shouldOverrideUrlLoading 1: http://www.hao123.com/wise_test.php

onPageStarted: http://www.hao123.com/wise_test.php

shouldOverrideUrlLoading 2: http://m.hao123.com/?vit=h123&from=3w123

shouldOverrideUrlLoading 1: http://m.hao123.com/?vit=h123&from=3w123

onPageStarted: http://m.hao123.com/?vit=h123&from=3w123

onPageFinished:http://m.hao123.com/?vit=h123&from=3w123

点击链接时执行:

shouldOverrideUrlLoading 2: http://m.hao123.com/j.php?z=2&page=index_cxv3

shouldOverrideUrlLoading 1: http://m.hao123.com/j.php?z=2&page=index_cxv3

onPageStarted: http://m.hao123.com/j.php?z=2&page=index_cxv3

shouldOverrideUrlLoading 2: http://i.ifeng.com/

shouldOverrideUrlLoading 1: http://i.ifeng.com/

onPageStarted: http://i.ifeng.com/

shouldOverrideUrlLoading 2: https://i.ifeng.com/

shouldOverrideUrlLoading 1: https://i.ifeng.com/

onPageStarted: https://i.ifeng.com/

onPageFinished:https://i.ifeng.com/

 总结:只是设置client不修改内部方法,有重定向的会获取重定向后加载定向url,如果继续重定向,继续加载定向url,定向到目标url后执行onPageFinished

shouldOverrideUrlLoading重写返回true时,执行顺序

webview.loadrl():加载方式

onPageStarted: http://www.hao123.com/
shouldOverrideUrlLoading 2: http://www.hao123.com/wise_test.php
onPageFinished:http://www.hao123.com/wise_test.php

此时网页加载不显示,并且 shouldOverrideUrlLoading 1 没有执行,显然想让webview加载网页不想出现这种结果。跳转链接的方式也不能验证了

shouldOverrideUrlLoading重写返回false时,执行顺序

 webview.loadrl():加载方式  此时网页正常显示

onPageStarted: http://www.hao123.com/
shouldOverrideUrlLoading 2: http://www.hao123.com/wise_test.php
onPageStarted: http://www.hao123.com/wise_test.php
shouldOverrideUrlLoading 2: http://m.hao123.com/?vit=h123&from=3w123
onPageStarted: http://m.hao123.com/?vit=h123&from=3w123
onPageFinished:http://m.hao123.com/?vit=h123&from=3w123

点击链接跳转方式

shouldOverrideUrlLoading 2: http://m.hao123.com/j.php?z=2&page=index_cxv3&pos=zxkz_n2&category=zhzx

onPageStarted: http://m.hao123.com/j.php?z=2&page=index_cxv3&pos=zxkz_n2&category=zhzx

shouldOverrideUrlLoading 2: http://i.ifeng.com/

onPageStarted: http://i.ifeng.com/

shouldOverrideUrlLoading 2: https://i.ifeng.com/

onPageStarted: https://i.ifeng.com/

onPageFinished:https://i.ifeng.com/

结论:返回false的时候,shouldOverrideUrlLoading 1 不执行,依然保持监测到重定向时访问重定向url,直到定向到目标url后执行onPageFinished

网上说加载网页需要重写shouldOverrideUrlLoading,在内部执行webView.loadUrl(url);并返回true,下面试试这种执行的顺序

重写shouldOverrideUrlLoading,在内部执行webView.loadUrl(url);并返回true

通过webview.load方式加载网页时

onPageStarted: http://www.hao123.com/

shouldOverrideUrlLoading 2: http://www.hao123.com/wise_test.php

onPageFinished:http://www.hao123.com/

onPageStarted: http://www.hao123.com/wise_test.php

shouldOverrideUrlLoading 2: http://m.hao123.com/?vit=h123&from=3w123

onPageFinished:http://www.hao123.com/wise_test.php

onPageStarted: http://m.hao123.com/?vit=h123&from=3w123

onPageFinished:http://m.hao123.com/?vit=h123&from=3w123

由于在内部重复执行了webview.load(url),会把每次定向到的url执行一遍onPageFinished方法

点击链接跳转时的执行顺序

shouldOverrideUrlLoading 2: http://m.hao123.com/j.php?z=2&page=index_cxv3&pos=zxkz_n2&category=zhzx

onPageStarted: http://m.hao123.com/j.php?z=2&page=index_cxv3&pos=zxkz_n2&category=zhzx

shouldOverrideUrlLoading 2: http://i.ifeng.com/

onPageFinished:http://m.hao123.com/j.php?z=2&page=index_cxv3&pos=zxkz_n2&category=zhzx

onPageStarted: http://i.ifeng.com/

shouldOverrideUrlLoading 2: https://i.ifeng.com/

onPageFinished:http://i.ifeng.com/

onPageStarted: https://i.ifeng.com/

onPageFinished:https://i.ifeng.com/

总结:内部执行了webview.load(url)后,会再执行一遍onPageFinished方法。

重写shouldOverrideUrlLoading,在内部执行webView.loadUrl(url);并返回false

onPageStarted: http://www.hao123.com/

shouldOverrideUrlLoading 2: http://www.hao123.com/wise_test.php

onPageFinished:http://www.hao123.com/

onPageStarted: http://www.hao123.com/wise_test.php

shouldOverrideUrlLoading 2: http://m.hao123.com/?vit=h123&from=3w123

onPageFinished:http://www.hao123.com/wise_test.php

onPageStarted: http://m.hao123.com/?vit=h123&from=3w123

onPageFinished:http://m.hao123.com/?vit=h123&from=3w123

链接跳转方式:

shouldOverrideUrlLoading 2: http://m.hao123.com/j.php?z=2&page=index_cxv3&pos=zxkz_n2&category=zhzx

onPageStarted: http://m.hao123.com/j.php?z=2&page=index_cxv3&pos=zxkz_n2&category=zhzx

shouldOverrideUrlLoading 2: http://i.ifeng.com/

onPageFinished:http://m.hao123.com/j.php?z=2&page=index_cxv3&pos=zxkz_n2&category=zhzx

onPageStarted: http://i.ifeng.com/ 

shouldOverrideUrlLoading 2: https://i.ifeng.com/ 

onPageFinished:http://i.ifeng.com/

onPageStarted: https://i.ifeng.com/

onPageFinished:https://i.ifeng.com/

跳转时有重定向,也会执行onPageFinished

最后试一下

在shouldOverrideUrlLoading中执行,webview.load(url) 但是返回super的方法

 @Override
            public boolean shouldOverrideUrlLoading(WebView webView, WebResourceRequest webResourceRequest) {
                isRedirection = true;
                LogUtils.e("shouldOverrideUrlLoading 2: " + webResourceRequest.getUrl());
                webView.loadUrl(webResourceRequest.getUrl().toString());
                return super.shouldOverrideUrlLoading(webView, webResourceRequest);
            }

通过webview.load方式加载网页时

onPageStarted: http://www.hao123.com/

shouldOverrideUrlLoading 2: http://www.hao123.com/wise_test.php

shouldOverrideUrlLoading 1: http://www.hao123.com/wise_test.php

onPageFinished:http://www.hao123.com/

onPageStarted: http://www.hao123.com/wise_test.php

shouldOverrideUrlLoading 2: http://m.hao123.com/?vit=h123&from=3w123

shouldOverrideUrlLoading 1: http://m.hao123.com/?vit=h123&from=3w123

onPageFinished:http://www.hao123.com/wise_test.php

onPageStarted: http://m.hao123.com/?vit=h123&from=3w123

onPageFinished:http://m.hao123.com/?vit=h123&from=3w123

链接跳转

 shouldOverrideUrlLoading 2: http://m.hao123.com/j.php?z=2&page=index_cxv3&pos=zxkz_n2&category=zhzx

shouldOverrideUrlLoading 1: http://m.hao123.com/j.php?z=2&page=index_cxv3&pos=zxkz_n2&category=zhzx

onPageStarted: http://m.hao123.com/j.php?z=2&page=index_cxv3&pos=zxkz_n2&category=zhzx

shouldOverrideUrlLoading 2: http://i.ifeng.com/

shouldOverrideUrlLoading 1: http://i.ifeng.com/

onPageFinished:http://m.hao123.com/j.php?z=2&page=index_cxv3&pos=zxkz_n2&category=zhzx

onPageStarted: http://i.ifeng.com/

shouldOverrideUrlLoading 2: https://i.ifeng.com/

shouldOverrideUrlLoading 1: https://i.ifeng.com/

onPageFinished:http://i.ifeng.com/

onPageStarted: https://i.ifeng.com/

onPageFinished:https://i.ifeng.com/

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值