🏠 Home 

Greasy Fork is available in English.

百度搜索拉黑指定网站

自由拉黑搜索结果,避免垃圾网站

  1. // ==UserScript==
  2. // @name 百度搜索拉黑指定网站
  3. // @namespace http://tampermonkey.net/
  4. // @version 0.3
  5. // @description 自由拉黑搜索结果,避免垃圾网站
  6. // @author ChuckRay
  7. // @match https://www.baidu.com/s*
  8. // @icon https://www.google.com/s2/favicons?sz=64&domain=baidu.com
  9. // @license GNU GPLv3
  10. // ==/UserScript==
  11. (function() {
  12. 'use strict';
  13. function debounce(fn,wait){
  14. var timer = null;
  15. return function(){
  16. if(timer !== null){
  17. clearTimeout(timer);
  18. }
  19. timer = setTimeout(fn,wait);
  20. }
  21. }
  22. const addBlackList = (url,dom)=>{
  23. const _url = prompt('拉黑含有以下字符的网站',url )
  24. if(!_url) return;
  25. const listStr = (localStorage.getItem('blackList')|| '').replace(/[\[\]]/g,'');
  26. const list = listStr? Array.from(new Set(listStr.split(','))):[];
  27. list.push(url);
  28. dom.remove();
  29. // console.log(list);
  30. localStorage.setItem('blackList',list.join(','))
  31. }
  32. const build = (url,dom)=>{
  33. const a = document.createElement('span');
  34. a.addEventListener("click", ()=>{
  35. addBlackList(url,dom);
  36. });
  37. a.innerText = ('拉黑');
  38. a.style.color = 'orange';
  39. a.className = 'addBlackBtn';
  40. return a;
  41. }
  42. const renderBtn = ()=>{
  43. console.log('renderBtn start');
  44. document.querySelectorAll(".addBlackBtn").forEach(v=>v.remove());
  45. const listDom = document.querySelector("#content_left");
  46. const listListDom = listDom.children;
  47. const listStr = (localStorage.getItem('blackList')|| '').replace(/[\[\]]/g,'');
  48. const blackList = listStr? Array.from(new Set(listStr.split(','))):[];
  49. for(let i=0;i<=listListDom.length;i++){
  50. let v = listListDom[i];
  51. if(!v) return;
  52. const mu = v.getAttribute('mu');
  53. if(!mu){
  54. v.remove();
  55. }
  56. v.append(build(mu,v));
  57. blackList.forEach(blaickUrl=>{
  58. if(blaickUrl.includes(mu)){
  59. v.remove();
  60. i--;
  61. }
  62. })
  63. }
  64. };
  65. var _wr = function(type) {
  66. var orig = history[type];
  67. return function() {
  68. var rv = orig.apply(this, arguments);
  69. var e = new Event(type);
  70. e.arguments = arguments;
  71. window.dispatchEvent(e);
  72. return rv;
  73. };
  74. };
  75. history.pushState = _wr('pushState');
  76. history.replaceState = _wr('replaceState');
  77. const delayRenderBtn = ()=>{
  78. console.log('renderBtn ->');
  79. setTimeout(()=>{ console.log('renderBtn time'); renderBtn();},2000);
  80. setTimeout(()=>{ console.log('renderBtn time'); renderBtn();},5000);
  81. }
  82. window.addEventListener('hashchange',()=>{
  83. delayRenderBtn();
  84. });
  85. window.addEventListener('popstate',()=>{
  86. delayRenderBtn();
  87. })
  88. window.addEventListener('replaceState', ()=>{
  89. delayRenderBtn();
  90. });
  91. window.addEventListener('pushState', ()=>{
  92. delayRenderBtn();
  93. });
  94. window.onload=()=>{renderBtn();}
  95. })();