android WebView 的shouldOverrideUrlLoading和onPageStarted

shouldOverrideUrlLoading(下文简称拦截)执行在onPageStarted(下文简称加载)前面,如果拦截成功则不执行加载,有部分机型是不支持拦截的比如某米,有部分HTML代码是不支持拦截的,比如HTML里面有js写计时器。

首先示范正常的拦截(比如拦截http开头的网址):

webView.setWebViewClient(new WebViewClient() {

        @Override
        public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
            String url = request.toString();
            if (url.indexOf("http") != -1) {
                Toast.makeText(this, "成功拦截http开头的网址", Toast.LENGTH_SHORT).show();
            }
            return true;
        }
    };

但是如果拦截装逼失败,比如某米的手机拦截不了 那么只能想办法在加载中拦截了,因为加载在拦截后面之后执行,如果拦截失败,加载就启动,如果拦截成功,就没加载什么事了。

下面是加载的代码:

webView.setWebViewClient(new WebViewClient() {

        @Override
        public void onPageStarted(WebView view, String url, Bitmap favicon) {
            String urls = url;
            if (url.indexOf("http") != -1) {
               Toast.makeText(this, "再次成功拦截http开头的网址,装逼成功", Toast.LENGTH_SHORT).show();
                view.stopLoading();//这句的意思是让WebView 停止加载
            }
            super.onPageStarted(view, url, favicon);
        }
    };

注意:要想真正的拦截WebView 中的点击网址,那么上面的两种装逼方式都要加在new WebViewClient() {}里面。

不懂私聊

PS:但是这样又很麻烦,每次代码都要写两遍分别在shouldOverrideUrlLoading和onPageStarted里面,我博客里面有一篇更加简单有效的代码通用安卓和苹果,具体是在Html用js,有兴趣可以移步看看,里面有现成代码可以直接复制粘贴。

猜你喜欢

转载自blog.csdn.net/Misters_Chen/article/details/81749647