『色んなところにfaviconを - #june29jp』の改良
『http://kengo.preston-net.com/archives/002866.shtml』経由
はてブと Google のリストに favicon を表示できる Greesemonkey スクリプトがあった]ので導入してみました.そこのコメントで議論されているように,favicon.ico が存在しないサイトがあるとガタガタになってしまう欠点があります.製作者の jun29 さんと同じく,私も favicon があると楽しいですから,それで全然問題無いです.
でもやっぱり,favicon.ico が無いサイトには Firefox のデフォルトアイコンを表示させたいですよね.そこで,スクリプトを改良しました.
改良版スクリプト
それぞれのスクリプト名には 2 って付けて違うものにしてあります.同時にインストールした場合は,どちらかを Disable にしましょう.
まず Google 用:
// ==UserScript== // @name Favicon with Google 2 // @namespace http://libelabo.jp/ // @description A script to add favicons next to links on Google search results // @include http://*google.*/*q=* // @exclude http://mail.google.com/* // ==/UserScript== (function(){ // apply the function to each element found by the path function forEachMatch(path, f, root) { var root = (root == null) ? document : root; var matches = root.evaluate( path, root, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null); for (var i = 0; i < matches.snapshotLength; i++) f(matches.snapshotItem(i)); } // adds the link favicon before itselft function add_favicon(link) { var g = link.parentNode; var container = document.createElement('div'); container.style.marginLeft = '16px'; container.style.paddingLeft = '1ex'; while (g.firstChild != null) { var e = g.firstChild; g.removeChild(e); container.appendChild(e); } var favicon_container = document.createElement('div'); favicon_container.style.cssFloat = 'left'; favicon_container.style.minWidth = '16px'; favicon_container.style.minHeight = '16px'; favicon_container.style.backgroundImage = 'url("chrome://global/skin/icons/folder-item.png")'; var favicon = document.createElement('img'); favicon.src = "http://" + link.hostname + "/favicon.ico"; favicon.width = 16; favicon.alt = ""; favicon_container.appendChild(favicon); g.appendChild(favicon_container); g.appendChild(container); } // apply to all recent links, popular and your bookmarks forEachMatch( "//a[@class='l']",add_favicon); }())
続いて,はてブ用:
// ==UserScript== // @name Favicon with Hatena Bookmark 2 // @namespace http://www.libelabo.jp/ // @description A script to add favicons next to links on Hatena Bookmark // @include http://b.hatena.ne.jp/* // @exclude http://b.hatena.ne.jp/rss/* // ==/UserScript== (function(){ // apply the function to each element found by the path function forEachMatch(path, f, root) { var root = (root == null) ? document : root; var matches = root.evaluate( path, root, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null); for (var i = 0; i < matches.snapshotLength; i++) f(matches.snapshotItem(i)); } // adds the link favicon before itselft function add_favicon(link) { var entry_body = link.parentNode; var container = document.createElement('div'); container.style.marginLeft = '16px'; container.style.paddingLeft = '1ex'; while (entry_body.firstChild != null) { var e = entry_body.firstChild; entry_body.removeChild(e); container.appendChild(e); } var favicon_container = document.createElement('div'); favicon_container.style.cssFloat = 'left'; favicon_container.style.minWidth = '16px'; favicon_container.style.minHeight = '16px'; favicon_container.style.backgroundImage = 'url("chrome://global/skin/icons/folder-item.png")'; var favicon = document.createElement('img'); favicon.src = 'http://' + link.hostname + '/favicon.ico'; favicon.alt = ''; favicon.width = 16; favicon_container.appendChild(favicon); entry_body.appendChild(favicon_container); entry_body.appendChild(container); } // apply to all recent links, popular and your bookmarks forEachMatch( "//a[@class='bookmark'] | //a[@class='news_title']",add_favicon); }())