webview过滤广告终极招式

本文介绍了如何使用WebView和JavaScript来过滤网页广告。首先讲解WebViewClient的作用,并启用JavaScript支持。然后指出广告通常表现为某些标签块,过滤广告的关键在于页面加载完成后通过URL匹配广告标签。最后,讨论了从Android 4.4开始,WebView由WebKit转向Chromium实现的背景和原因。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先明白WebViewClient干啥的?
这货用于辅助WebView,处理各种通知、请求等事件

今天就是要重写她的方法!

这里主要交给javascript完成,那么javascript支持一定不能少!

WebSettings webSetting = webview.getSettings();
webSetting.setJavaScriptEnabled(true);

广告到底是啥?

明白了吧,就是一些div或者其他标签的块~~ 我们要把这些块去除 ~~

那么过滤广告的时机是何时?
页面加载完成的时候

 public void onPageFinished(WebView view, String url) {
       blockAds(view);//过滤
  }

blockAds首要的事情是view.getUrl(),通过url地址去匹配广告标签(Html标签属性)
关键就是构建javascript代码,懂web的都知道,Javascript中提供了访问文档标签的方法

        StringBuilder sb = new StringBuilder();
        sb.append("javascript: ");
        String[] alltag = tags.split(",");
        for (int i = 0; i < alltag.length; i++) {
            String adTag = alltag[i];
            if (adTag.trim().length() > 0) {
                adTag = adTag.trim();
                if (adTag.contains("#")) {
                    adTag = adTag.substring(adTag.indexOf("#") + 1);
                    if (Build.VERSION.SDK_INT <  Build.VERSION_CODES.KITKAT) {//19
                        sb.append("document.getElementById(\'").append(adTag).append("\').innerHTML=\'\';");
                    } else {
                        sb.append("document.getElementById(\'").append(adTag).append("\').remove();");
                    }

                } else if (adTag.contains(".")) {
                    adTag = adTag.substring(adTag.indexOf(".") + 1);
                    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) {
                        sb.append("var esc=document.getElementsByClassName(\'").append(adTag).append("\');for (i in esc){esc[i].innerHTML=\'\';};");

                    } else {
                        sb.append("var esc=document.getElementsByClassName(\'").append(adTag).append("\');for (var i = esc.length - 1; i >= 0; i--){esc[i].remove();};");

                    }
                } else if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) {
                    sb.append("var esc=document.getElementsByTagName(\'").append(adTag).append("\');for (i in esc){esc[i].innerHTML=\'\';};");
                } else {
                    sb.append("var esc=document.getElementsByTagName(\'").append(adTag).append("\');for (var i = esc.length - 1; i >= 0; i--){esc[i].remove();};");
                }
            }
        }

历史大事件

Android从4.4起提供基于Chromium实现的WebView。此前WebView基于WebKit实现。WebKit提供网页解析、布局和绘制以及JS运行等基础功能。Chromium在WebKit基础上为WebView提供进程、线程和渲染等基础构架。(大概是因为Android部门负责人从Andy Rubin变成了Chrome部门的主管Sundar Pichai了(现任谷歌CEO)吧)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值