ふぁっきん not well-formed, XMLHttpRequest とかで
GreaseMonkey では GM_xmlhttpRequest で他のページとってくるじゃないですか。で、onload して req.responseXML をとるなり req.responseText をとるなりするけど、どうにもこうにも not well-formed なページ (HTML とか) をとってきてノード検索するとき面倒くさいんですよ。responseXML はもちろん空だし、responseText はもちろんただのテキストだし。
で、なんとなく思いついたので以下のように解決するようにした。
GM_xmlhttpRequest({
method : "GET",
url : i.href,
onload : function (req) {
// てきとーなエレメント作って突っ込む (ブラウザにパースさせる)
var d = document.createElement("div");
d.innerHTML = req.responseText;
// d を最初のコンテキストノードにして文書を XPath 検索
$X(".//foobar", d);
},
onerror : function (req) {
alert(req.responseText);
}
});
なんてキモイ!
問題点は application/xhtml+xml なページから not well-formed なページをとってくるっていう場合は使えないこと。なぜなら innerHTML が使えないから。でも殆どの場合 (というか殆どのページは) text/html なので問題ない感じ。はてなとかはてなとかはてなとか。
Firefox 1.5 からは application/xhtml+xml なページでも innerHTML 使えるみたいです。by yoko さん
関連エントリー
- 簡易ビルダー まえのとあわせて $N = function (name, attr, childs) { var ret = document.creat...
- はてダの「続きを読む」を展開する GM hatena-kill-seemore.user.js 「続きを読む」を展開して表示します。それだけです。完成度が低いです。複数の「続きを読...
- GreaseMonkey で MochiKit 使ってみる。すなわち外部ライブラリの読み込み。あるいははてなのグラフが綺麗じゃない GreaseMonkey で外部ライブラリが使いたいな。みたいな。似たようなのでは CMS researcher - Greasemonke...
- XPath, $X function, NSResolver JS の XPath なんて書きましたけど、重大なバグがありまして、っていうかなんで気がつかなかったんだろう、えーそれは applicati...
- dll 関数の補足と TODO dll 関数 の補足と覚書 GM_xmlhttprequest の onload でなんで .call とかやっているかというと、一部ライブ...