🏠 Home 

Google Favicons

Adds favicons to Google search r###lts.


Install this script?
// ==UserScript==
// @name	Google Favicons
// @description	Adds favicons to Google search r###lts.
// @include	https://www.google.*/search*
// @version	1.12
// @grant       GM_addStyle
// @icon        https://i.imgur.com/ezjWmEO.png
// @namespace   https://greasyfork.org/users/14186
// ==/UserScript==
/**
* [+] CSS INFO
* #res img.favicon = Normal R###lts Favicon Position
* div.action-menu img.favicon = Normal R###lts Hide Incorrect Sub Google Favicons
* div#res div#search div#ires div.g div.rc div.r h3 = Normal R###lts Adjust Title for Favicon room
* #res div.gG0TJc img.favicon, #res div.card-section a.RTNUJf img.favicon = News Tab Favicon Position
* #res div.card-section a.RTNUJf img.favicon = News Tab Sub R###lts Favicon Size
* [+] QUERY INFO
* #res .g div.rc div.r a = Normal R###lts
* #res div.gG0TJc a = News Tab Header R###lts
* #res div.card-section a.RTNUJf = News Tab Sub R###lts
*/
(function(){
(typeof GM_addStyle != 'undefined' ? GM_addStyle : function addStyle(css) {
var head = document.getElementsByTagName('head')[0];
var style = document.createElement("style");
style.type = "text/css";
style.appendChild(document.createTextNode(css));
head.appendChild(style);
})("#res img.favicon {\
border: none;\
margin-left: 1px;\
position: absolute;\
margin-top: 1px;\
z-index: 9;\
}\
div.action-menu img.favicon {\
display: none;\
}\
div#res div#search div#ires div.g div.rc div.r h3 {\
text-indent: 26px;\
}\
#res div.gG0TJc img.favicon, #res div.card-section a.RTNUJf img.favicon {\
position: relative;\
vertical-align: middle;\
margin-left: 0px;\
margin-top: 0px;\
margin-right: 7px;\
top: -2px;\
}\
#res div.card-section a.RTNUJf img.favicon {\
width: 0.9em;\
height: 0.9em;\
padding-bottom: 0px;\
vertical-align: sub;\
}\
");
var FAVICON_GRABBER = 'https://www.google.com/s2/favicons?domain='; // 'http://favicon.yandex.net/favicon/'
var QUERY = '#res .g div.rc div.r a, #res div.gG0TJc a, #res div.card-section a.RTNUJf';
/**
* @param {NodeList} links
*/
function add_favicons_to(links) {
for (var i=0; i<links.length; i++) {
if (links[i].firstChild.className != 'favicon') {
var host = links[i].href.replace(/.*https?:\/\//, '').replace(/\/.*$/,'');
var img = document.createElement('IMG');
img.src = FAVICON_GRABBER + host;
img.width = '16';
img.height = '16';
img.className = 'favicon';
links[i].insertBefore(img, links[i].firstChild);
}
}
}
add_favicons_to(document.querySelectorAll(QUERY));
/**
* Debounce function from http://code.google.com/p/jquery-debounce/
*/
function debounce(fn, timeout, invokeAsap, context) {
if (arguments.length == 3 && typeof invokeAsap != 'boolean') {
context = invokeAsap;
invokeAsap = false;
}
var timer;
return function() {
var args = arguments;
if(invokeAsap && !timer) {
fn.apply(context, args);
}
clearTimeout(timer);
timer = setTimeout(function() {
if(!invokeAsap) {
fn.apply(context, args);
}
timer = null;
}, timeout);
};
}
document.addEventListener('DOMNodeInserted', debounce(function handleNewFavicons(event){
if (event.target.className != 'favicon') {
add_favicons_to(document.querySelectorAll(QUERY));
}
}, 500)
, false);
})();