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) 
	}); 
}) 

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

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

 

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/13868.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论