XMLHttpRequestのHTMLサポート (responseType='document')

XHR2改めXHRではresponseType = 'document'でHTML文書を返してくれる。で、Firefox 11, Chrome 18, Safari 6から使えるようになっている。

var xhr = new XMLHttpRequest();
xhr.onload = function () {
    console.log(this.response instanceof HTMLDocument);
}
xhr.open('GET', 'foo.html');
xhr.responseType = 'document';
xhr.send();

こんなんでいいのかな…。ええと、responseをinspectしてみてください。

responseXMLもHTMLを返すから奇々怪々な感じではあるけれど、そんなこと言うとオブジェクトの名前からつっこまないといけないので、ぐっとこらえて。

というわけでMDNでそれについて書いてる記事を訳しました。

原文では最後にresponseTextで読んだものを正規表現で処理するってセクションがあるんだけど、それは記事のスコープ外なんじゃと思ったので英語のまま。タイトル的にはあってもいいのかもしれないけど…。あったんだけど案の定削除された

responseType='json'もある

あ、そういえば仕様にはresponseType = 'json'JSON.parseしたオブジェクトが返ってくる機能もはいってる。こっちは12月に仕様に追加されたばっかりだけど、すでにFx10で対応してるらしい。(もともとFx9で'moz-json'としてサポートされてて、Fx10で接頭辞が外れたらしい)。

OperaPresto 2.10.256で実装済らしいけど、一番新しいOpera Nextが255だったので確認できず。2.10.269なスナップショットが出た!うごいた!

いっぽうWebKitはまだ実装中

そしてIE10はどうなんだろう。BlobはサポートされてるけれどArrayBufferやらが書かれてないから、厳しいかなあ。
む、'ms-stream'なんてあるんだ…。

追記 (2013-08-26): Blink (M31)でサポートされたOperaもこれで後退したのが元通りに。

追記 (2013-09-22): WebKitでもサポートされた

追記 (2012-08-16): IE10のresponseType

リソース発見。

responseType='document', responseType='arraybuffer'もサポートされているみたい。responseType='json'はない。でも、JSON.parse()すればいいだけの話でもあるので、そんな残念でもないか。