AC-美化百度-谷歌-必应-搜狗搜索结果之Favicon的显示

美化百度、谷歌、必应、搜狗的搜索结果,显示网站的favicon图标,看着更好看

  1. // ==UserScript==
  2. // @name AC-美化百度-谷歌-必应-搜狗搜索结果之Favicon的显示
  3. // @namespace BlockKafanTopicinGoogle
  4. // @include /^https?://www.baidu.com/.*/
  5. // @include /^https?://www.sogou.com/.*/
  6. // @include /^https?://\w+.bing.com/.*/
  7. // @include /^https?://encrypted.google.[^\/]+/
  8. // @include /^https?://www.google.[^\/]+/
  9. // @icon https://coding.net/u/zb227/p/zbImg/git/raw/master/img0/icon.jpg
  10. // @author AC
  11. // @version 0.5.6
  12. // @connect https?://[\S]+
  13. // @description 美化百度、谷歌、必应、搜狗的搜索结果,显示网站的favicon图标,看着更好看
  14. // @note 0.5.6 修复favicon的地址失效的问题
  15. // @note 0.5.5 修复在baidu下的部分小程序启用不正常的问题
  16. // @note 0.5.4 继续在以前的服务器中徘徊
  17. // @note 0.5.3 修复必应的部分 BUG 以及显示部分搜索为两个图标的问题
  18. // @note 0.5.1 由于谷歌的问题,赶紧换成 DOMNodeInserted 算了
  19. // @note 0.5.0 改个名字~
  20. // @note 0.4.9 顺带处理了搜狗搜索结果的favicon
  21. // @note 0.4.8 根据建议,扩大bing的正则匹配范围
  22. // @note 0.4.7 修复部分百度贴吧地址问题
  23. // @note 0.4.6 修复之前因为小程序而遗留的BUG
  24. // @note 0.4.5 切换错误的显示图标为另一个源的,避免taobaosvn显示错误
  25. // @note 0.4.4 修复部分百度搜索结果中小程序的显示异常问题
  26. // @note 0.4.3 修复部分谷歌地址搜索的结果问题,以及百度的小程序图标显示
  27. // @note 0.4.2 修复百度文库的图标显示两个的问题
  28. // @note 0.4.1 修复谷歌图标显示不出的问题,同时加了一个bing的搜索结果显示
  29. // @note 0.4.0 修复百度的各种图标丢失问题
  30. // @note http://bbs.kafan.cn/thread-2074740-1-1.html
  31. // @grant none
  32. // @license MIT
  33.  
  34. // ==/UserScript==
  35.  
  36. //===================================================普通规则变量定义=======================================================
  37.  
  38. //===================================================主入口=======================================================
  39. var fatherName = [
  40. "c-container", //baidu1
  41. "rc", //google
  42. "b_algo", //bing1
  43. "b_ans", //bing2
  44. "vrwrap", //sogou1
  45. "rb"//sogou2
  46. ];
  47. document.addEventListener('DOMNodeInserted', blockKafanBaidu, false);
  48.  
  49. function blockKafanBaidu() {
  50. var citeList;
  51. if(location.hostname.indexOf("baidu") > -1 && location.hostname.indexOf("baidu") < 20){
  52. citeList = document.querySelectorAll(".c-showurl");
  53. }else if(location.hostname.indexOf("google") > -1 && location.hostname.indexOf("google") < 20){
  54. citeList = document.querySelectorAll("._Rm");
  55. }else if(location.hostname.indexOf("bing.com") > -1 && location.hostname.indexOf("bing") < 20){
  56. citeList = document.querySelectorAll(".b_attribution>cite");
  57. }else if(location.hostname.indexOf("sogou") > -1 && location.hostname.indexOf("sogou") < 20){
  58. citeList = document.querySelectorAll("cite[id*='cacheresult_info_']");
  59. }
  60. deal(citeList);
  61. }
  62.  
  63. // 传入nodelist,然后查找两个列,查看是否一致,一致则删除
  64. function deal(citeList){
  65. for (var index = 0; index < citeList.length; index++) {
  66. var url = replaceAll(citeList[index].innerHTML); // 只能通过这个来判定,因为url无法得知
  67. if(null == citeList[index].getAttribute("deal")){
  68. if(url === "") continue;
  69. deal_fatherNode(citeList[index], getFaviconUrl(url));
  70. }
  71. }
  72. }
  73.  
  74. function deal_fatherNode(node, faviconUrl){
  75. //https://api.byi.pw/favicon/?url=???? 不稳定
  76. //http://"+faviconUrl+"/cdn.ico?defaulticon=http://soz.im/favicon.ico 不稳定
  77. //https://www.xtwind.com/api/index.php?url=???? 挂了。。。
  78. //https://statics.dnspod.cn/proxy_favicon/_/favicon?domain=sina.cn
  79. // 如果地址不正确,那么丢弃
  80.  
  81. var curNode = node;
  82. for(II = 0; II <= 5; II++){
  83. curNode = curNode.parentNode;
  84. if(isInUrlList(curNode.className)){
  85. break;
  86. }
  87. }
  88. if(II <= 5){
  89. var pos = curNode.innerHTML.indexOf("fav-url");
  90. pos = (pos===-1) ? curNode.innerHTML.indexOf("favurl"):pos;
  91. pos = (pos===-1) ? curNode.innerHTML.indexOf("tit-ico"):pos;
  92. pos = (pos===-1) ? curNode.innerHTML.indexOf("c-gap-icon-right-small\""):pos;
  93. pos = (pos===-1) ? curNode.innerHTML.indexOf("img_fav rms_img"):pos;
  94. pos = (pos===-1) ? curNode.innerHTML.indexOf("c-tool-"):pos;
  95. //他自己已经做了favicon了
  96. if(pos > 0)
  97. return;
  98. if(faviconUrl === "") return;
  99.  
  100. var imgHTML = "<img class=\"faviconT\" style=\"vertical-align:sub;\" src='https://favicon.yandex.net/favicon/v2/"+faviconUrl+"?size=32' height=20 width=20>&nbsp;";
  101.  
  102. //var errorUrl = "onerror=\"this.src='http://code.remix.ac.cn/favicon.ico'\"";
  103. //var imgHTML = "<img class=\"faviconT\" style=\"vertical-align:sub;\" src=\"http://www.google.cn/s2/favicons?domain="+faviconUrl+"\" height=20 width=20 " + errorUrl + "/>&nbsp;";
  104. var insNode = curNode.firstChild;
  105. if(insNode.length > 0){ //如果是false,那么就是正常节点,否则为文字节点
  106. insNode = curNode.childNodes[1];
  107. }
  108. if(insNode.innerHTML.indexOf("class=\"faviconT") > 0) {
  109. node.setAttribute("deal", "1"); return;
  110. }
  111. insNode.innerHTML = imgHTML + insNode.innerHTML;
  112. node.setAttribute("deal", "1");
  113. }
  114. }
  115. /*去掉网址中的<xxx>*/
  116. function replaceAll(sbefore){
  117. return sbefore;
  118. // const result = sbefore.split('-');
  119. // if(location.hostname.indexOf("sogou") > -1 && location.href.indexOf("sogou") < 20){
  120. // // --搜狗专用;如果第一个是中文的话,地址就是第二个
  121. // sbefore = result[1];
  122. // }
  123. // cosnt send = sbefore.replace(/(\/[^/]*|\s*)/g ,"").replace(/<[^>]*>/g, ""); //.replace(/<?[^>]*?\s*>?/g ,"");
  124. // // console.log(send);
  125. // return send;
  126. }
  127. function getFaviconUrl(citeUrl){
  128. return citeUrl.replace(/[^.]+\.([^.]+)\.([^.]+)/, "$1.$2")
  129. // var result = citeUrl.split('- ');
  130. // if(location.hostname.indexOf("sogou") > -1 && location.href.indexOf("sogou") < 20){
  131. // // --搜狗专用;如果第一个是中文的话,地址就是第二个
  132. // citeUrl = result[1];
  133. // }
  134. // citeUrl = citeUrl.replace(/https?:\/\//g,"").replace(/<\/?strong>/g,"").replace(/<\/?b>/g,"")
  135. // .replace(/<?>?/g,"").replace(/( |\/).*/g,"");
  136. // //return citeUrl+"/favicon.ico";
  137. // return citeUrl;
  138. }
  139. function isInUrlList(url){
  140. for(let i = 0; i < fatherName.length; i++){
  141. if(url.indexOf(fatherName[i]) >= 0){
  142. return true;
  143. }
  144. }
  145. return false;
  146. }