miyagawaさんのエントリを見て、「TrackBack Auto-discovery用のRDFはコメントアウトされているから、innerHTML
とかじゃなくて、ドキュメントのノードを全てチェックし、nodeType
が8かどうかをチェックすればコメントを抽出できるので、そこから正規表現かけてやればTrackBack ping URL探せそう!」と思ったのでシコシコ作ってみました。
JavaScriptのコードはこんな感じになっています。
var tburl;
var comments = new Array();
getComment();
for (var i = 0; i < comments.length; i++) {
if (comments[i].match(/trackback:ping="([^"]+)"/)) {
tburl = RegExp.$1;
break;
}
}
prompt('TrackBack ping URL', tburl);
function getComment(elm) {
if (!elm) elm = document.documentElement;
for (var i = 0; i < elm.childNodes.length; i++) {
if (elm.childNodes[i].nodeType == 8) {
comments[comments.length] = elm.childNodes[i].data;
} else if (elm.childNodes[i].nodeType == 1) {
getComment(elm.childNodes[i]);
}
}
}
getComment()
が要素のノードを全部チェックし、定義済みのcomments
という名前の配列にコメントの内容をまとめてどんどん追加していく関数です。nodeType
が1、すなわち要素の場合は、その要素からさらにgetComment()
をよぶといういわゆる再帰的な仕組み。この関数が終了した後、今度はcomments
でループを回し、内容を、/trackback:ping="([^"]+)"/
という正規表現でチェックしていきます。で、マッチしたらRegExp.$1
でTrackBack ping URLを抜き出して、最後にプロンプトを表示ということ。
Bookmarklet: Extract TrackBack ping URL
FirefoxとIE6で動作を確認しました。まーこのままではあまり使い物になるとは思えないシロモノですが、これをベースに何かいろいろ出来るかも出来ないかも。
僕はほらローカルからPerlでTrackBack Auto-discoveryしちゃってるので・・・。誰かスゴイの作ってください。