札幌市西区

2006-11-10-Fri ぐりもん

Google Readerでfaviconを表示

| 03:14 | Google Readerでfaviconを表示のブックマークコメント

Google Readerを使い始めました。まだまだなイマイチなところはあるけれど、Labs入りなのでお試し中ですね。

で、

インスパイアされて、Google Readerfaviconを表示させるGreasemonkeyスクリプトを作りました。


faviconwithgooglereader.user.jsをインストール

f:id:kei-s:20061111030414:image

『ARRAY(0x1fba7520)』の改良 - ドレッシングのようなを参考に、faviconが無い場合にデフォルトアイコンを表示できるようにもしました。

	var showBlankIcon = true;

にしてください。

上記の3名様、Google Reader開発者、Greasemonkey開発者、Firefox開発者、そしてすべてのひとに感謝を。

いちおソースは以下。コピペがばれます。

更新

.com以外のドメインにも対応しました.Yasimaさんありがとうございます。

更新

表示を修正しました。id:turipatさんありがとうございます。

// ==UserScript==
// @name          Favicon with Google Reader
// @namespace     http://libelabo.jp/
// @description   A script to add favicons next to links on Google Reader
// @include       http://www.google.tld/reader/view/*
// @include       https://www.google.tld/reader/view/*
// ==/UserScript==

(function() {
	
	var showBlankIcon = false;
	
	
	
	var timerID = null;
	
	function findNode(root, xpath) {
		var result = document.evaluate(xpath, root, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);
		if (! result.snapshotLength) return null;
		return result.snapshotItem(0);
	}
  
	function addFaviconToNode(link,node) {
		var favicon = document.createElement('img');
		favicon.setAttribute('class', 'entry-favicon');
		favicon.src = "http://" + link.hostname + "/favicon.ico";
		favicon.width = 16;
		favicon.alt   = "";
		favicon.style.border = "0";
		favicon.align = "top";

		if( showBlankIcon ){
			var g = link.parentNode;
			
			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")';
			
			favicon_container.appendChild(favicon);
			node.parentNode.insertBefore(favicon_container,node);
		}
		else{
			favicon.style.marginRight = "1ex";
			node.parentNode.insertBefore(favicon,node);
		}
	}
	
	function getFaviconImg(node){
		return findNode(node,'.//img[@class="entry-favicon"]');
	}
	
	function addFavicons() {
		var entries = document.getElementById('entries');
		for (var i=0; i< entries.childNodes.length; i++) {
			var entry = entries.childNodes[i];
			var collapsedTitle = findNode(entry, './/div[@class="collapsed"]//h2');
			var entryContainerTitle = findNode(entry, './/div[@class="entry-container"]//h2');
			
			var link = null;
			var title = null;
			if (entryContainerTitle != null) {
				link = entryContainerTitle.firstChild;
				title = link.firstChild.textContent;
			} else if (collapsedTitle != null) {
				link = collapsedTitle.parentNode.parentNode.firstChild;
				title = collapsedTitle.textContent;
			}
			if ( link != null ){
				if ( entryContainerTitle != null && getFaviconImg(entryContainerTitle) == null ){
					addFaviconToNode(link,link.firstChild);
				}
				else if (collapsedTitle != null && getFaviconImg(link.parentNode) == null){
					addFaviconToNode(link,collapsedTitle);
				}
			}
		}
	}

timerID = setInterval(addFavicons, 3000);

})();

YasimaYasima 2008/10/05 14:27 // @include に co.jp も入れといていただけると楽です。

nanasinanasi 2009/03/04 23:28 rssad.jp経由のフィードのfaviconもどうにか取得できないでしょうか…

turipatturipat 2009/04/09 16:15 大変便利なスクリプトを公開してくださってありがとうございます。

ところで、現行のデザインだとレイアウトが微妙に崩れてしまうようです。
16 行目あたりに
favicon.align = "top";
を追加することで当方の環境では回避できました。報告まで。