NULL::something

Login via flickr, はてな, TypeKey.

2006-06-19

ふぁっきん 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 さん

Inserted at 2006-06-20T16:59:02+09:00

Comments (0)

Trackback URI: http://lowreal.net/logs/2006/06/19/1.trackback

NULL

RSS feed meter for http://lowreal.net/logs/latest

Alternates

  1. RSS 1.0
  2. Atom 1.0

Generated with Taglibro

この日記は Taglibro と呼ばれる XML ベースの XSLT をテンプレートとして使ったシステムを使っています。現在の Taglibro は Ruby, ruby-xslt, libxml-ruby による実装です。ソースコードはとりあえず公開していません。