webview屏蔽页面

遇到的问题:
1. webview load url 之后,看到有个中国移动的广告浮窗,乍一看挺可爱的,为什么会出来呢?
有个小浮窗
2. 点击进去看到这个html页面,点击设置
这里点击设置
3. 令人气愤的是,这三个选项都不是我想要的啊
令人气愤啊
4. 令人无奈的只要通过流量浏览网页,就会出现这个弹窗,这个没人管吗?很不雅观啊
解决方式
1. 方法一:onLoadResource()//这个方式无效,具体的目前我也不清楚

            @Override
            public void onLoadResource(WebView view, String url) {
                LogUtils.d(CommentWorkProblemFragment.class, "onLoadResource url " + url);
                if (url.startsWith("http://www.baidu.cn")) {
                    //百度(目标地址)
                    super.onLoadResource(view, url);
                } else if (url.contains("heb.wsc.wo.cn")) {
                    view.loadUrl(null);
                    //联通                    
                } else {
                    //其他
                    view.loadUrl(null);
                }
            }
  1. 方法二:shouldInterceptRequest()
            @Override
            public WebResourceResponse shouldInterceptRequest(WebView view, String url) {
                //屏蔽广告
                if (url.startsWith("http://www.baidu.com")) {
                    //百度
                    return super.shouldInterceptRequest(view, url);
                } else if (url.contains("heb.wsc.wo.cn")) {
                    return new WebResourceResponse(null, null, null);
                    //联通
                }else if(url.contains("http://218.205.68.160:8080")) {
                    //移动
                    return new WebResourceResponse(null, null, null);
                }
                else {
                    //其他
                    return new WebResourceResponse(null, null, null);
                }
            }
  1. 方法三:shouldOverrideUrlLoading()//1.可以不加载指定的url2. 甚至指定的url,跳转到其他的Activity
webView.setWebViewClient(new WebViewClient() {

            @Override
            // 在点击请求的是链接是才会调用,重写此方法返回true表明点击网页里面的链接还是在当前的webview里跳转,不跳到浏览器那边。这个函数我们可以做很多操作,比如我们读取到某些特殊的URL,于是就可以不打开地址,取消这个操作,进行预先定义的其他操作,这对一个程序是非常必要的。
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                // 判断url链接中是否含有某个字段,如果有就执行指定的跳转(不执行跳转url链接),如果没有就加载url链接
                if (url.contains("/mproduct-")) {
                    Intent i = new Intent(MainActivity.this, MainActivity.class);
                    startActivity(i);
                    return true;
                } else {
                    return false;
                }
            }
        });
  1. 方法四:webview拦截可获得标签的广告(通过js删除元素,未测试,转载方法)
      mWebView.setWebViewClient(new WebViewClient(){
            @Override
            public void onPageFinished(WebView view, String url) {

                view.loadUrl("javascript:document.getElementById('statusholder').remove();");
                view.loadUrl("javascript:document.getElementById('progresstextholder').remove();");
                view.loadUrl("javascript:document.getElementById('ftsiappholder').remove();");
                view.loadUrl("javascript:document.getElementById('tlbstoolbar').remove();");

                super.onPageFinished(view, url);
            }
        });

参考
1. webview的url链接请求拦截
2. webview的广告拦截
3. webview拦截可获得标签的广告

猜你喜欢

转载自blog.csdn.net/shuijianbaozi/article/details/79539838