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

 引入這個文件可以過濾大部分的廣告,其他的還需要繼續完善廣告。

如果有其他更好的方法,請聯系我,蟹蟹。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM