XMLHttpRequest における HTML の扱い
Baseline
Widely available
*
This feature is well established and works across many devices and browser versions. It’s been available across browsers since 2015年7月.
* Some parts of this feature may have varying levels of support.
W3C の XMLHttpRequest 仕様書では、もともと XML の解釈しか対応していなかった XMLHttpRequest に HTML の解釈を追加しています。この機能によって、ウェブアプリは XMLHttpRequest を使って HTML を解釈済の DOM として取得することができます。
一般的な XMLHttpRequest の使い方についての概要は、 XMLHttpRequest の利用をお読みください。
制限
同期的な XMLHttpRequest の利用を避けるために、 HTML 対応は同期モードでは利用できません。また、 HTML 対応は responseType プロパティが "document" に設定されている時にのみ有効です。この制限によって、古いコードが XMLHttpRequest を使って responseText が text/html であるリソースを既定のモードで受け取るときに、無用に HTML を解釈する時間を浪費することを防ぎます。また、この制限によって HTTP のエラーページ (ふつうは text/html の応答本文を持つ) の際に responseXML が null と想定する古いコードで問題が発生することを防ぐこともできます。
使用方法
XMLHttpRequest を使って HTML リソースを DOM として取得することは、 XMLHttpRequest を使って XML リソースを DOM として取得するのと似ていますが、同期モードを使用することはできず、 XMLHttpRequest オブジェクトの open() を呼び出した後、 send() を呼び出す前に、 responseType プロパティに文字列 "document" 代入して、明示的に文書を要求する必要があるという点が異なります。
const xhr = new XMLHttpRequest();
xhr.onload = () => {
console.log(xhr.responseXML.title);
};
xhr.open("GET", "http://developer.mozilla.org/file.html");
xhr.responseType = "document";
xhr.send();
文字エンコーディング
HTTP の Content-Type ヘッダーで文字エンコーディングが宣言されている場合は、そのエンコーディングが使用されます。そうでない場合、もしバイトオーダーマークがある場合は、そのバイトオーダーマークが示すエンコーディングを使用します。そうでない場合、もしファイルの先頭 1024 バイト以内にエンコーディングを宣言する <meta> 要素がある場合は、そのエンコーディングが使用されます。それもない場合、ファイルは UTF-8 としてデコードされます。
仕様書
| Specification |
|---|
| XMLHttpRequest> # interface-xmlhttprequest> |
ブラウザーの互換性
Loading…