最近遇到有些廣告的問題,首先是在手機端,可能是用戶訪問了一些小網站的,(你懂得),然后在訪問我的網站時,會帶小廣告過來,通常是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) }); })
引入這個文件可以過濾大部分的廣告,其他的還需要繼續完善廣告。
如果有其他更好的方法,請聯系我,蟹蟹。