Replace Missing Favicon

Add default favicon for any sites that don't have a favicon

  1. // ==UserScript==
  2. // @name Replace Missing Favicon
  3. // @namespace iFantz7E.ReplaceMissingFavicon
  4. // @description Add default favicon for any sites that don't have a favicon
  5. // @version 0.14
  6. // @icon https://i.imgur.com/AI5VsOE.png
  7. // @include *
  8. // @run-at document-start
  9. // @grant GM_xmlhttpRequest
  10. // @connect *
  11. // @copyright 2017, 7-elephant
  12. // ==/UserScript==
  13.  
  14. // Connect: connect to any icons in link tags
  15.  
  16. (function ()
  17. {
  18. "use strict";
  19. // jshint multistr:true
  20.  
  21. function attachOnReady(callback)
  22. {
  23. document.addEventListener("DOMContentLoaded", function (e)
  24. {
  25. callback();
  26. });
  27. }
  28.  
  29. function getFavicon()
  30. {
  31. var rgxIcon = /icon/i;
  32. var elesLink = document.querySelectorAll("link");
  33. for (var i = 0; i < elesLink.length; i++)
  34. {
  35. var attrRel = elesLink[i].getAttribute("rel");
  36. if(rgxIcon.test(attrRel))
  37. {
  38. return elesLink[i].getAttribute("href") || "";
  39. }
  40. }
  41. return "";
  42. }
  43.  
  44. function addFavicon()
  45. {
  46. // Default icon from https://s2.googleusercontent.com/s2/favicons?domain=sample
  47. var iconDefault = "data:image/png;base64,\
  48. iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABs0lEQVR4AWL4//8/RRjO8Iucx+noO0O2qmlbUEnt5r3Juas+\
  49. hsQD6KaG7dqCKPgx72Pe9GIY27btZBrbtm3btm0nO12D7tVXe63jqtqqU/iDw9K58sEruKkngH0DBljOE+T/qqx/Ln718RZO\
  50. Fasxyd3XRbWzlFMxRbgOTx9QWFzHtZlD+aqLb108sOAIAai6+NbHW7lUHaZkDFJt+wp1DG7R1d0b7Z88EOL08oXwjokcOvvU\
  51. xYMjBFCamWP5KjKBjKOpZx2HEPj+Ieod26U+dpg6lK2CIwTQH0oECGT5eHj+IgSueJ5fPaPg6PZrz6DGHiGAISE7QPrIvIKV\
  52. rSvCe2DNHSsehIDatOBna/+OEOgTQE6WAy1AAFiVcf6PhgCGxEvlA9QngLlAQCkLsNWhBZIDz/zg4ggmjHfYxoPGEMPZECW+\
  53. zjwmFk6Ih194y7VHYGOPvEYlTAJlQwI4MEhgTOzZGiNalRpGgsOYFw5lEfTKybgfBtmuTNdI3MrOTAQmYf/DNcAwDeycVjRO\
  54. gZFt18gMso6V5Z8JpcEk2LPKpOAH0/4bKMCAYnuqm7cHOGHJTBRhAEJN9d/t5zCxAAAAAElFTkSuQmCC";
  55. var ele = document.createElement("link");
  56. ele.setAttribute("rel", "icon");
  57. ele.setAttribute("type", "image/png");
  58. ele.setAttribute("href", iconDefault);
  59. document.head.appendChild(ele);
  60. }
  61.  
  62. function main()
  63. {
  64. if (window !== window.parent)
  65. {
  66. //console.log("iframe");
  67. return;
  68. }
  69. var onloadFavIcon = function(response, b)
  70. {
  71. if (response.status !== 200)
  72. {
  73. console.log("Favicon: Not found - " + (response.finalUrl || "Request error"));
  74. addFavicon();
  75. }
  76. else
  77. {
  78. //console.log("Favicon: Found 200 - " + response.finalUrl);
  79. }
  80. }
  81. var favIcon = getFavicon();
  82. if (!favIcon)
  83. {
  84. GM_xmlhttpRequest(
  85. {
  86. url: "/favicon.ico",
  87. method: "HEAD",
  88. onload: onloadFavIcon,
  89. onerror: onloadFavIcon
  90. });
  91. }
  92. else
  93. {
  94. //console.log(favIcon);
  95. /*
  96. GM_xmlhttpRequest(
  97. {
  98. url: favIcon,
  99. method: "HEAD",
  100. onload: onloadFavIcon,
  101. onerror: onloadFavIcon
  102. });
  103. */
  104. }
  105. }
  106.  
  107. attachOnReady(main);
  108. })();
  109.  
  110. // End