自由拉黑搜索结果,避免垃圾网站
// ==UserScript== // @name 百度搜索拉黑指定网站 // @namespace http://tampermonkey.net/ // @version 0.3 // @description 自由拉黑搜索结果,避免垃圾网站 // @author ChuckRay // @match https://www.baidu.com/s* // @icon https://www.google.com/s2/favicons?sz=64&domain=baidu.com // @license GNU GPLv3 // ==/UserScript== (function() { 'use strict'; function debounce(fn,wait){ var timer = null; return function(){ if(timer !== null){ clearTimeout(timer); } timer = setTimeout(fn,wait); } } const addBlackList = (url,dom)=>{ const _url = prompt('拉黑含有以下字符的网站',url ) if(!_url) return; const listStr = (localStorage.getItem('blackList')|| '').replace(/[\[\]]/g,''); const list = listStr? Array.from(new Set(listStr.split(','))):[]; list.push(url); dom.remove(); // console.log(list); localStorage.setItem('blackList',list.join(',')) } const build = (url,dom)=>{ const a = document.createElement('span'); a.addEventListener("click", ()=>{ addBlackList(url,dom); }); a.innerText = ('拉黑'); a.style.color = 'orange'; a.className = 'addBlackBtn'; return a; } const renderBtn = ()=>{ console.log('renderBtn start'); document.querySelectorAll(".addBlackBtn").forEach(v=>v.remove()); const listDom = document.querySelector("#content_left"); const listListDom = listDom.children; const listStr = (localStorage.getItem('blackList')|| '').replace(/[\[\]]/g,''); const blackList = listStr? Array.from(new Set(listStr.split(','))):[]; for(let i=0;i<=listListDom.length;i++){ let v = listListDom[i]; if(!v) return; const mu = v.getAttribute('mu'); if(!mu){ v.remove(); } v.append(build(mu,v)); blackList.forEach(blaickUrl=>{ if(blaickUrl.includes(mu)){ v.remove(); i--; } }) } }; var _wr = function(type) { var orig = history[type]; return function() { var rv = orig.apply(this, arguments); var e = new Event(type); e.arguments = arguments; window.dispatchEvent(e); return rv; }; }; history.pushState = _wr('pushState'); history.replaceState = _wr('replaceState'); const delayRenderBtn = ()=>{ console.log('renderBtn ->'); setTimeout(()=>{ console.log('renderBtn time'); renderBtn();},2000); setTimeout(()=>{ console.log('renderBtn time'); renderBtn();},5000); } window.addEventListener('hashchange',()=>{ delayRenderBtn(); }); window.addEventListener('popstate',()=>{ delayRenderBtn(); }) window.addEventListener('replaceState', ()=>{ delayRenderBtn(); }); window.addEventListener('pushState', ()=>{ delayRenderBtn(); }); window.onload=()=>{renderBtn();} })();