• js屏蔽广告


    最近遇到有些广告的问题,首先是在手机端,可能是用户访问了一些小网站的,(你懂得),然后在访问我的网站时,会带小广告过来,通常是wifi被dns劫持的情况下导入到广告脚本,

    1、处理这些要知道广告的根源,广告脚本种子基本上是动态创建script来加载的,比如百度的pos广告

    处理这些需要禁止动态加载脚本,防止广告加载,

    (function () {
        var createElement = document.createElement;
        document.createElement = function (tag) {
            switch (tag) {
                case 'script':
                    console.log('禁用动态添加脚本,防止广告加载');
                    break;
                default:
                    return createElement.apply(this, arguments);
            }
        }
    })();
    

     这是一种方法,如果你的脚本也是动态加载的话就需要自己配置自己脚本的“白名单”--过滤规则

    2、另一种是通用的js广告,常见的是div嵌套iframe,就需要js清楚,话不多说

    //注入页面的脚本文件
    ;
    $(function() {
    
    	var clearAd = {
    		//由于manifest文件匹配规则只有通配没有非功能,所以可在此处添加不想删除广告的页面
    		checkUrl: function() {
    			var Checkflag = 0,
    				url = window.location.href;
    
    			//手动添加不需要清除广告的域
    			var notDel = [
    				"www.baidu.com",
    				"taobao.com",
    				"tmall.com",
    				"jd.com"
    			];
    
    			//正则匹配
    			for (var i = 0; i < notDel.length; i++) {
    				var reg = new RegExp(notDel[i], "g");
    
    				if (reg.test(url)) {
    					console.log('This page does not clear ads.');
    					break;
    				} else {
    					if (i == notDel.length - 1) {
    						Checkflag = 1;
    					}
    				}
    			}
    			
    			if (Checkflag == 1) {
    				this.clear();
    				this.findSomeAdPossible();
    			}
    		},
    		clear: function() {
    			console.log('Clear Start');
    			//此处可手动添加广告框id名,去除顽疾ad必备
    			var ad_id_name = [
    				"cproIframe2001holder",
    				"cproIframe2002holder",
    				"cproIframe2003holder",
    				"cproIframe2004holder",
    				"cproIframe2005holder",
    				"cproIframe2006holder",
    				"cproIframe2007holder",
    				"cproIframe2008holder",
    				"cproIframe2009holder",
    				"id_300x250_banner_top",
    				"ads",
    				"google_image_div",
    				"mx_cs_71603_1261456",
    				"AC_TR86_71603",
    				"cproIframe_u2060917_1",
    				"content_right",
    				"left-promotion",
    				"top_ads",
    				"layerd"
    			];
    
    			//此处添加广告框类名
    			var ad_css_name = [
    				"cproIframe_u410704_3",
    				"img_ad",
    				"hover_btn"
    			];
    
    			for (var i = 0; i < ad_id_name.length; i++) {
    				//使用remove删除节点,提升性能
    				$('#' + ad_id_name[i]).remove();
    			}
    
    			for (var i = 0; i < ad_css_name.length; i++) {
    				$('.' + ad_css_name[i]).remove();
    			}
    		},
    		//简单的智能算法
    		findSomeAdPossible: function() {
    			var sap = $('div iframe'),
    				ad_img = $('div script').parent().find('img,embed'),
    				float_img = $('div object').parent().find('img,embed');
    
    			this.arrayDel(sap, 360, 200);
    			this.arrayDel(ad_img, 350, 150);
    			this.arrayDel(float_img, 350, 150);
    		},
    		arrayDel: function(arr, conWidth, conHeight) {
    			var len = arr.length;
    
    			for (var i = 0; i < len; i++) {
    				var self = arr.eq(i);
    
    				if (self.width() <= conWidth || self.height() <= conHeight) {
    					self.remove();
    				}
    
    			}
    		},
    		init: function() {
    			this.checkUrl();
    		}
    	}
    
    	$(document).ready(function() {
    		clearAd.init();
    
    		//为防止ajax异步延时加载的广告隔4s再清除一次
    		setTimeout(function() {
    			clearAd.init();
    		}, 4000)
    	});
    })
    

     引入这个文件可以过滤大部分的广告,其他的还需要继续完善广告。

    如果有其他更好的方法,请联系我,蟹蟹。

  • 相关阅读:
    (纯代码)QQ登录界面:
    (纯代码)图片浏览器:
    (纯代码 )transform旋转:
    苹果API常用英语名词:
    纯代码创建Button控件:
    GCD
    UISegmentedControl 开发笔记
    UISwitch 开关控件 开发笔记
    Xcode6中怎么添加空工程模板
    HTTP Live Streaming直播(iOS直播)技术分析与实现
  • 原文地址:https://www.cnblogs.com/simba-lkj/p/8027625.html
Copyright © 2020-2023  润新知