从Google Baidu Bing等搜索引擎结果中屏蔽自定义的网站
// ==UserScript== // @name AC-从Google Baidu Bing等搜索引擎结果中屏蔽自定义网站 // @namespace BlockKafanTopicinGoogle // @include /^https?\:\/\/encrypted.google.[^\/]+/ // @include /^https?\:\/\/www.google.[^\/]+/ // @include /^https?\:\/\/www.baidu.[^\/]+/ // @include /^https?\:\/\/[\w]+.bing.[^\/]+/ // @include /^https?\:\/\/www.haosou.com+/ // @include /^https?\:\/\/www.youdao.com/ // @include /^https?:\/\/www.sogou.com/ // @include /^https?:\/\/search.disconnect.me/ // @icon https://coding.net/u/zb227/p/zbImg/git/raw/master/img0/icon.jpg // @author AC // @version 0.7.0 // @description 从Google Baidu Bing等搜索引擎结果中屏蔽自定义的网站 // @grant note 2017.4.14 更新了:根据反馈,处理了chrome上的MutationObserver的问题,还是换回了DOMinsert,反正能用 // @grant note 2016.2.6 更新了:根据反馈,增加了新的搜索点:Disconnect.ME搜索点,建立了一个简单的搜索结果 // @grant note 2015.11.22 更新了:采用了新的事件触发MutationObserver,替代之前经常被出触发的DOMinsert事件,大大减少了触发的情况,减轻了浏览器负担 // @grant note 2015.11.21 更新了:之前由于偷懒,所以简单的写了些大部分功能,这次基本上是完善了总的功能,应该不会有漏网之鱼了,如果出现问题请及时反馈邮箱[email protected],如果没有问题的话应该来说这是最后一版了,除非以后代码失效了我会进行修改的 // @grant note 2015.11.4 更新了:谷歌干掉搜索结果留下的空白--注意先备份以前的修改 // @grant note 2015.10.31-4 一定程度上再次调整了卡顿的几率,同时加入函数tryto_del_specificEle(url_d, spec_d, spec_f_d, index_d),还有删除了百度的软件推广 // @grant note 2015.10.31-3 看来都不喜欢卡饭,我就直接写好了不要www.kafan.cn好了,之前只是针对www.kafan.cn/topic // @grant note 2015.10.31-2 修正了(因修改谷歌页面卡顿)导致的百度卡死情况,蛋疼的百度在某个f13标签卡死了 // @grant note 2015.10.31 更新处理谷歌页面卡顿的情况-求测试和反馈 // ==/UserScript== //===================================================特殊规则处理======================================================= /***用于干掉某些不属于普通规则的模块,可以自己仿照格式添加**/ //var sepcStr1_USELESS=new Array("待删除目的URL", "待删除网址的class", "待删除网址对应最终块的class"); var sepcStr1=new Array("rj.baidu.com","c-showurl", "r###lt-op c-container"); //百度软件推广 tryto_del_specificEle(sepcStr1[0], sepcStr1[1], sepcStr1[2], sepcStr1[3]); //===================================================普通规则变量定义======================================================= /* 变量x用于baidu-google-bing-haosou-youdao 就是网址的黑名单的意思~~,--不显示该名单中的网址 */ var x=new Array( "360.cn", "mm131.com", "jkforum.net", "t66y.cc", "jav-library.com", "jav007.com", "javss.com", "javmega.net", "kafan.cn/topic", "www.kafan.cn › 卡饭教程" ); //网址节点的最近父节点 百度、必应、谷歌、好搜、有道--->用来尽可能的保证不卡死浏览器 var dir_fatherName = new Array( "f13", //百度 "b_attribution", //必应 "f kv _SWb", //谷歌 "res-linkinfo", //好搜 "r###lt-footer", //有道 "fb", //搜狗 "title" ); //网址节点的最终父节点-一一对应 var end_fatherName = new Array( "r###lt c-container ", //百度 "b_algo", //必应 "g", //谷歌 "res-list", //好搜 "rnw default", //有道 "rb", //搜狗 "r###lt" ); var map={}; initMap(); //===================================================主入口======================================================= document.addEventListener('DOMNodeInserted', blockKafanBaidu, false); //document.addEventListener('DOMNodeInserted',blockKafanBaidu,false); function blockKafanBaidu() { var isBaidu = (location.href.indexOf('.baidu.com') > -1); var isDisConnectMe = (location.href.indexOf('.disconnect.me') > -1); var citeList; if(isBaidu){ citeList = document.getElementsByClassName('c-showurl'); //之前取的是g,但这个标签在google中是最大的标签,导致谷歌页面卡住,所以先判断是baidu站点 deal(citeList) }else if(isDisConnectMe){ citeList = document.getElementsByClassName('title'); deal_DisConnectMe(citeList); }else{ citeList = document.getElementsByTagName('cite'); // 其他的几个搜索貌似都是以cite为TAG的 deal(citeList) } } // 传入nodelist,然后查找两个列,查看是否一致,一致则删除 function deal(citeList){ for (var index = 0; index < citeList.length; index++) { var element = replaceAll(citeList[index].innerHTML); if (checkIndexof(element)) { var node = citeList[index].parentNode; var cur_dir_fatherName = node; var II=0; if(is_dir_fatherNode(cur_dir_fatherName.className)){ for(II = 0; II <= 5; II++){ node = node.parentNode; console.log(node.className+" kk "+ map[cur_dir_fatherName.className]); if(isequal(node.className, map[cur_dir_fatherName.className])){ break; } } } if(II <= 5) node.parentNode.removeChild(node); } } } function deal_DisConnectMe(citeList){ for (var index = 0; index < citeList.length; index++) { var element = replaceAll(citeList[index].href); if (checkIndexof(element)) { var node = citeList[index].parentNode; var cur_dir_fatherName = node; var II=0; if(is_dir_fatherNode(cur_dir_fatherName.id)){ for(II = 0; II <= 5; II++){ node = node.parentNode; console.log(node.id+" kk "+ map[cur_dir_fatherName.id]); if(isequal(node.id, map[cur_dir_fatherName.id])){ break; } } } if(II <= 5) node.parentNode.removeChild(node); } } } // 初始化Map function initMap(){ var length = dir_fatherName.length; for(var i = 0; i < length; i++){ var a = dir_fatherName[i]; var b = end_fatherName[i]; map[a] = b; } } // 确认是否为最终节点 function isequal(cur_end, map_end){ if(map_end == cur_end) return true; return false; } // 遍历Array,判断网址父节点是应该属于列表中的 function is_dir_fatherNode(node){ var leng = dir_fatherName.length; for(var i = 0; i < leng; i++){ if(node == dir_fatherName[i]){ return true; } } return false; } /** url_d 被删除的地址url spec_d 被删除节点的Class名字 spec_f_d 被删除节点的总的父亲节点的Class名字 index_d 节点到父节点的层数 */ function tryto_del_specificEle(url_d, spec_d, spec_f_d, index_d){ //alert('删除ing '+spec_d); var citeList2 = document.getElementsByClassName(''+spec_d); for(var index = 0; index < citeList2.length; index++){ var ele = replaceAll(citeList2[index].innerHTML); if((ele.indexOf(''+url_d)>-1)){ var node = citeList2[index].parentNode; for(var index2 = 0; index2 <= 4; index2++){ node = node.parentNode; //alert(node.className); if(node.className == spec_f_d){ break; } } if(index2 <= 4) node.parentNode.removeChild(node); } } } /*去掉网址中的<xxx>*/ function replaceAll(sbefore){ var send; send = sbefore.replace(/<[^>]*>/g ,""); return send; } /*确认是当前例子的一个子例*/ function checkIndexof(element){ var r###lt = (element.indexOf(x[0]) > -1); for(var i = 1; i <= x.length; i++){ //alert("check"); r###lt = r###lt || (element.indexOf(x[i]) > - 1); } return r###lt; }