取消所有timeout(chrome插件小試-推薦以及廣告去除)

chrome去百度廣告插件

嗯…在開發的時候遇到個問題,就是在遍歷刪除所有百度廣告之後(因爲百度廣告部分div的className多變,所以採用排除法),廣告會再次出現,看控制檯,顯示的是timeout的警告信息;

這裏用到取消timeout,可是市面上大多是根據timeout的id號來操作(clearTimeout),翻百度翻的不耐煩,所以查了下谷歌…要不說國際大公司呢

// 取消所有 timeout
var highestTimeoutId = setTimeout(";");
for (var i = 0 ; i < highestTimeoutId ; i++) {
    clearTimeout(i); 
}

這樣,就可以取消所有的timeout了~

下面放上插件的核心代碼…寫的比較爛…嗯…這個去廣告只對網址進入搜索的時候管用

manifest.json:

{
  "name": "百度清潔計劃",
  "manifest_version": 2,
  "version": "1.0",
  "description": "to my lover CassieLin",
  "browser_action": {
    "default_icon": "icon.png"
  },
  "content_scripts": [
    {
      "matches": ["https://www.baidu.com/s*"],
      "js": ["bg.js"]
    }
  ]
}

mainifest.json 中的 icon.png 是圖標,matches中是匹配到的網址,/s* 是在搜索網址中過濾,最好加上/s*,不然在百度跳轉網址裏面會報錯造成程序無法繼續,bg.js是核心代碼

bg.js:

var contents = ["s_wrap","content_right","u","s_icons","leftBlock"];
var ads = ["leftBlock"];
/*
	取消 右側推薦內容
*/
cancelItems();
function cancelItems(){
	for(var i in contents){
		if(document.getElementById(contents[i]) != null){
			var one = document.getElementById(contents[i]);
			one.parentNode.removeChild(one);
		}
	}
}
// 取消所有 timeout
var highestTimeoutId = setTimeout(";");
for (var i = 0 ; i < highestTimeoutId ; i++) {
    clearTimeout(i); 
}
/*
	取消 廣告內容
*/
cleanAD();
function cleanAD(){
	// var m_childs = document.getElementById("content_left").getElementsByTagName("div");
	var m_childs = getChildren(document.getElementById("content_left"), 'div');
	for(var i in m_childs){
		if(m_childs[i].getAttribute("class")==null)
			continue;
		if(m_childs[i].getAttribute("class").indexOf("result") < 0)
			m_childs[i].parentNode.removeChild(m_childs[i]);
	}
	for(var i in ads){
		if(document.getElementsByClassName(ads[i]).length > 0){
			var oneItems = document.getElementsByClassName(ads[i]);
			for(var i in oneItems){
				oneItems[i].parentNode.removeChild(one);
			}
		}
	}
}
// 獲取一級div子元素
function getChildren(obj, tag){
    var objChild = [] ;
    var objs = obj.getElementsByTagName(tag);
    for(var i=0,j=objs.length; i<j;++i){
        if(objs[i].nodeType != 1){alert(objs[i].nodeType);
            continue ;
        }
        var temp = objs[i].parentNode;
        if(temp.nodeType == 1){
            if(temp == obj){
                objChild[objChild.length] = objs[i] ;
            }
        }else if(temp.parentNode == obj){
            objChild[objChild.length] = objs[i] ;
        }
    }
    return objChild ;
}

到時候把文件夾拖拽到谷歌瀏覽器的拓展程序裏就好了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章