はてなアンテナのリダイレクト(?)をパスする

function addToHistory(uri){
	var historyService = Components.classes["@mozilla.org/browser/nav-history-service;1"]
		.getService(Components.interfaces.nsINavHistoryService);
	var ioService = Components.classes["@mozilla.org/network/io-service;1"]
		.getService(Components.interfaces.nsIIOService);
	historyService.addPageWithDetails(ioService.newURI(uri, null, null), "", new Date().getTime() * 1000);
}

gBrowser.mPanelContainer.addEventListener("click", function(e){
	if (e.button == 2) return;
	var s = e.target.href;
	if (!s) return;
	
	if (s.lastIndexOf("http://a.hatena.ne.jp/go?", 0) == 0){
		addToHistory(s);
		s = s.slice(25, -14);
	} else if (s.lastIndexOf("http://ime.nu/", 0) == 0){
		s = "http://" + s.substring(14);
	} else if (s.lastIndexOf("http://www.pixiv.net/jump.php?", 0) == 0){
		s = s.substring(30);
	} else {
		return;
	}
	e.target.href = s;
}, true);

Firefox3.5とuserChrome.js0.8で開発、動作確認。
はてなアンテナhttp://a.hatena.ne.jp/go?〜を経由せずに目的地へ行くスクリプト
ついでに2ちゃんねるとpixivにも対応。
#こういうの、リダイレクトとは違うよね。何て言うんだろ。
はてなアンテナ用のスクリプトは、探せばいくつかみつかるのだが、
リンクターゲットを書き換えてしまうので、リンクの色で未読アンテナを区別できない。
アンテナのリンクに時刻が入っているのには、重要な意味があったのだ。
それに、リンクにマウスを乗せたときime.nuが表示されないというのも、不便な面があると思った。そこで、リンクのクリックイベントを捉え、そのタイミングで行き先を変えることにした。
ところが、当然ながらhttp://a.hatena.ne.jp/go?〜にアクセスしないのでリンクの色は訪問済みにならない。それでnsINavHistoryServiceのaddVisitを試したがうまくいかず(そのときはリンクの色が変わるが履歴に追加されない)、setPageDetailsを試したが、そんな関数はないと言われ、
自分のやり方が間違っているせいなのか、Firefox3.5で仕様が変わったせいなのか、
原因の切り分けができずにあちこちさまよった。
結局、関数一覧を吐かせてsetPageDetailsに似た名前のaddPageWithDetailsを発見。
まあ、MDCでsetPageDetailsの説明に書いてあった関数なんだけど。
なぜgetTime()の値を1000倍するのかもよくわからないが、とにかく動いた。
厳密にはこれもリンク先を(クリックした後に)変えてしまうのだけど、
クリックすれば訪問したということだし、更新すれば正しいリンクに戻るので、
リンクの色という点では問題がなくなった。
userChrome.jsは、自分用に細かくカスタマイズできていいのだが、
自分専用のものは自分しかメンテナンスできないので、Firefoxの仕様が変わったときなどは面倒だ(しょっちゅういじっていれば苦にならないのだが)。