WebView设置setWebViewClient时的执行顺序

时间:2025-04-17 13:21:57
(new WebViewClient() {
            @Override
            public boolean shouldOverrideUrlLoading(WebView webView, String s) {
                ("shouldOverrideUrlLoading 1: " + s);
                return (webView, s);
            }

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

            }

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

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

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

shouldOverrideUrlLoading不重写时执行顺序

如果时():

onPageStarted: http:///

shouldOverrideUrlLoading 2: http:///wise_test.php

 shouldOverrideUrlLoading 1: http:///wise_test.php

onPageStarted: http:///wise_test.php

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

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

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

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

点击链接时执行:

shouldOverrideUrlLoading 2: http://m./?z=2&page=index_cxv3

shouldOverrideUrlLoading 1: http://m./?z=2&page=index_cxv3

onPageStarted: http://m./?z=2&page=index_cxv3

shouldOverrideUrlLoading 2: /

shouldOverrideUrlLoading 1: /

onPageStarted: /

shouldOverrideUrlLoading 2: /

shouldOverrideUrlLoading 1: /

onPageStarted: /

onPageFinished:/

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

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

():加载方式

onPageStarted: http:///
shouldOverrideUrlLoading 2: http:///wise_test.php
onPageFinished:http:///wise_test.php

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

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

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

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

点击链接跳转方式

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

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

shouldOverrideUrlLoading 2: /

onPageStarted: /

shouldOverrideUrlLoading 2: /

onPageStarted: /

onPageFinished:/

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

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

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

通过方式加载网页时

onPageStarted: http:///

shouldOverrideUrlLoading 2: http:///wise_test.php

onPageFinished:http:///

onPageStarted: http:///wise_test.php

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

onPageFinished:http:///wise_test.php

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

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

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

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

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

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

shouldOverrideUrlLoading 2: /

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

onPageStarted: /

shouldOverrideUrlLoading 2: /

onPageFinished:/

onPageStarted: /

onPageFinished:/

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

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

onPageStarted: http:///

shouldOverrideUrlLoading 2: http:///wise_test.php

onPageFinished:http:///

onPageStarted: http:///wise_test.php

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

onPageFinished:http:///wise_test.php

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

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

链接跳转方式:

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

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

shouldOverrideUrlLoading 2: /

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

onPageStarted: / 

shouldOverrideUrlLoading 2: / 

onPageFinished:/

onPageStarted: /

onPageFinished:/

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

最后试一下

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

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

通过方式加载网页时

onPageStarted: http:///

shouldOverrideUrlLoading 2: http:///wise_test.php

shouldOverrideUrlLoading 1: http:///wise_test.php

onPageFinished:http:///

onPageStarted: http:///wise_test.php

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

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

onPageFinished:http:///wise_test.php

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

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

链接跳转

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

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

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

shouldOverrideUrlLoading 2: /

shouldOverrideUrlLoading 1: /

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

onPageStarted: /

shouldOverrideUrlLoading 2: /

shouldOverrideUrlLoading 1: /

onPageFinished:/

onPageStarted: /

onPageFinished:/

相关文章