安卓开发-JavaScript过滤WebView的Html广告标签

内容纲要

Js过滤广告标签

问题

webView.loadUrl();能加载网页,但是网页中的广告html标签却也一并显示了,如下
文章地址进行查看

图片3

JavaScript过滤

首先找到广告的Html标签

浏览器内按F12可以看到各种相关信息,找到如下内容

  1. <a class = "view-more">

    图片1

  2. <div class = "ZhihuDailyOIABanner">

    图片2

### 代码实现

private void hidenBanner(WebView view) {
    //JS,过滤带广告的Div标签(Daily)
    String javascript = "javascript:function hideBanner() {" +
            "var banners = document.getElementsByClassName('Daily');" +
            "var firstbanner = banners[0];" +
            "firstbanner.remove();" + "}";
    view.loadUrl(javascript);
    view.loadUrl("javascript:hideBanner();");
}
private void hidenViewMore(WebView view) {
    //JS,过滤带广告的<a>标签(view-more)
    String javascript = "javascript:function hideViewMore() {" +
            "var ViewMore = document.getElementsByClassName('view-more');" +
            "var firstViewMore = ViewMore[0];" +
            "firstViewMore.remove();" + "}";
    view.loadUrl(javascript);
    view.loadUrl("javascript:hideViewMore();");
}

WebView加载Url时通过调用上述函数,即可去除两个对应的广告

webView.setWebViewClient(new WebViewClient() {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        Log.d("myInfo", "url: " + url);
        //view.loadUrl(url);
        return true;
    }

    @Override
    public void onLoadResource(WebView view, String url) {
        //在加载资源时过滤广告标签
        //对网页加载速度稍有影响
        hidenBanner(view);
        hidenViewMore(view);
        super.onLoadResource(view, url);
    }

    @Override
    public void onPageFinished(WebView view, String url)
    {
        //经尝试,在页面刷新完成后才执行Js删去广告,体验不好,不采用
        // hidenBanner(view);
        // hidenViewMore(view);
        super.onPageFinished(view, url);
    }
    });
    //加载url
    webView.loadUrl(post_url);
}

发表评论