[18] [CODE(DOMi)@en[[[XMLDocument]]]] [[インターフェイス]]の
[DFN[[CODE(DOMm)@en[[[load]]]]]] [[メソッド]]は、
[[fetch]] を行い、[[文書]]の[[内容]]を得られた [[XML文書]]によって置き換えられるものです。

* 仕様書

[REFS[
- [17] '''[CITE@en-GB-x-hixie[HTML Standard]] ([TIME[2015-05-06 10:42:35 +09:00]] 版) <https://html.spec.whatwg.org/#dom-xmldocument-load>'''
- [30] [CITE@en-GB-x-hixie[HTML Standard]] ([TIME[2015-05-06 10:42:35 +09:00]] 版) <https://html.spec.whatwg.org/#current-document-readiness>
]REFS]

* 処理

[19] 次のようにしなければ[['''なりません''']] [SRC[>>17]]。
[FIG(steps)[
= [20] 必須の第1引数を [CODE(IDL)@en[USVString]] として解釈します。
= [21] [[入口設定群オブジェクト]]の[[API基底URL]]に対して最初の[[引数]]の
[[URLの解決]]を行います。
= [22] [[解決]]に失敗したら、
== [23] [CODE(DOMe)@en[[[SyntaxError]]]] [[例外]]を[[投げて]]停止します。
= [24] 得られた[[URL]]が[[文脈オブジェクト]]と[[同じ起源]]でなければ、
== [25] [CODE(DOMe)@en[[[SecurityError]]]] [[例外]]を[[投げて]]停止します。
= [28] [[文脈オブジェクト]]の[[子供]]をすべて削除します。
= [29] [[文脈オブジェクト]]の[[現在文書準備度]]を、 [CODE[[[loading]]]]
に設定します。
= [72] [[単純イベントを発火]]します。 [SRC[>>30]]
[FIG(list members)[
[FIGCAPTION[
[[単純イベント]]
]FIGCAPTION]
:[[イベント型]]:[CODE(DOMe)@en[[[readystatechange]]]]
:[[対象]]:[[文脈オブジェクト]]
]FIG]
= [31] [[真]]を返して停止します。
]FIG]

[32] 引き続き、[[並列に]]、次のような[[要求]]を [[fetch]] しなければ[['''なりません''']]。
[SRC[>>17]]
[FIG(list members)[
[FIGCAPTION[
[[要求]]
]FIGCAPTION]
:[[URL]]:得られた [[URL]]
:[[クライアント]]:[[入口設定群オブジェクト]]
:[[終点]]:[CODE[[[subresource]]]]
:[[同期フラグ]]:設定する
:[[モード]]:[[同じ起源]]
:[[credentialsモード]]:[CODE[[[same-origin]]]]
:[[URL credentials利用フラグ]]:設定する
]FIG]

[33] [[fetch]] の[[応答]]の[[Content-Typeメタデータ]]が [[XML MIME型]]の場合は、
新しい[[XML構文解析器]]を作成し、新しい [CODE(DOMi)@en[[[Document]]]]
と関連付け、[[応答]]の[[本体]]をこの[[XML構文解析器]]により[[構文解析]]しなければ[['''なりません''']]。
[[XML]] の[[整形式]]かつ[[名前空間整形式]]でない場合には、
新しい[[文書]]からすべての[[子供]]を削除しなければ[['''なりません''']]。 [SRC[>>17]]

[34] [[fetch]] 後、次のような[[タスク]]を[[タスクキューに追加]]しなければ[['''なりません''']] [SRC[>>17]]。
[FIG(list members)[
[FIGCAPTION[
[[タスク]]
]FIGCAPTION]
:[[タスク源]]:?
:処理:
[FIG(steps)[
= [35] [[文脈オブジェクト]]の[[現在文書準備度]]を、 [CODE[[[complete]]]]
に設定します。
= [36] [[単純イベントを発火]]します。 [SRC[>>30]]
[FIG(list members)[
[FIGCAPTION[
[[単純イベント]]
]FIGCAPTION]
:[[イベント型]]:[CODE(DOMe)@en[[[readystatechange]]]]
:[[対象]]:[[文脈オブジェクト]]
]FIG]
= [37] 新しい[[文書]] (あれば) の[[子供]]を、すべて新しい [CODE(DOMi)@en[[[DocumentFragment]]]]
の[[子供]]とします。
= [38] [CODE(DOMi)@en[[[DocumentFragment]]]] を[[文脈オブジェクト]]に[[挿入]]します。
= [39] [[単純イベントを発火]]します。 [SRC[>>30]]
[FIG(list members)[
[FIGCAPTION[
[[単純イベント]]
]FIGCAPTION]
:[[イベント型]]:[CODE(DOMe)@en[[[load]]]]
:[[対象]]:[[文脈オブジェクト]]
]FIG]
]FIG]
]FIG]

[40] [[名前空間整形式]]でない場合やエラーの場合は、
[[文脈オブジェクト]]の[[文書]]は空になります。

;; [41] 一般に[[Webブラウザー]]は実際には [[XML 1.0]] に厳密に従っておらず、
エラーとするかそうでないかの条件が異なっています。ここでも [[XML]]
仕様ではなく、[[Webブラウザー]]における[[XML]]の動作に倣うものと思われます。

* 歴史

[1] [[DOM3LS]] [[WD]] にあったのと同じ or 似た意味の [CODE(DOMm)@en[[[load]]]]
[[メソッド]]は、 [[MSXML]] (not [[MSHTML]]) や [[Gecko]] で実装されています。

[2] [CITE[Hawk's W3 Laboratory : XML : JavaScriptでXMLを扱う方法]] ([TIME[2009-01-04 12:36:07 +09:00]] 版) <http://web.archive.org/web/20060902115316/www.hawk.34sp.com/stdpls/xml/js_xml.html>

>[INS[[[MSXML]] では、]] 同期的に読み込みを行った場合、loadメソッドは読み込みの成否に応じて真偽値を返すので、parseErrorプロパティからIXMLDOMParseError オブジェクトにアクセスしてエラー情報を取り出すことができます。

>ただしこの [INS[([CODE(DOMa)@en[[[async]]]] を [CODE(JS)@en[[[false]]]] にする)]] 方法は古いバージョンのGeckoエンジンでは使用できません。私は最新のソースを追いかけているわけではないので正確には分かりませんが、Mozilla's DOM Sample Projectを参考にする限り、Mozilla 1.3.1 の段階ではasyncプロパティは存在しません。またNetscape 7.0では使用不可能なのを確認しています。
>
確実に使用できるのは onload イベントの中で処理を行う方法です。 
>さて、続いてエラー処理についてです。Geckoベースのブラウザの場合、エラー処理は少々複雑です。 
>まず読み込みそのものに(ファイルが見つからないなどの理由で)失敗した場合と、XMLのパースに失敗した場合とでエラー時の動作が異なります。更にその双方が、少なくとも一度仕様変更されています(もしかしたらもっと多いかも知れません)。先述したとおり私は細かくソースを追ってはいませんので、ここでは参考までに、Netscape 7.0での動作を旧仕様として、Mozilla Firefox 1.0PRの動作を新仕様として紹介しておきます。
>
まず旧仕様においては、読み込みそのものに失敗しても一切エラーは起こりませんので、documentElement が null であることから判断するしかありません。 
>次に、XMLのパースに失敗した場合、以下のようなXMLが読み込まれたものとして扱われます。エラーらしい動作は一切起こりません。 
>現実的にはルート要素の名前がparsererrorで、namespaceURIがhttp://www.mozilla.org/newlayout/xml/parsererror.xmlだったらエラーと判断することになるでしょう。ちなみにこの名前空間にどんな根拠があるのかは不明ですが、ソース中にも直書きしてあったりするので、ある程度は信頼できるものと思われます。
>
一方新仕様の場合、ファイルの読み込みそのものに失敗すると例外がthrowされるので、loadメソッドはtryブロックの中で実行する必要があります。 
>次に、XMLのパースに失敗した場合、以下のようなXMLが読み込まれたとして扱われます。やはりエラーらしい動作は起こりません。 
>要素名や名前空間は旧仕様と同じですが、よく見比べると微妙に書式が異なっています。この違いにどの程度の意味があるのかは分かりませんので、あくまで参考に留めておいてください。 

[3] [[同一起源方針]]の対象になっているみたいです。

** DOM3

[7] [CODE(DOMm)@en[[[load]]]] [[メソッド]]、[CODE(DOMa)@en[[[async]]]] [[属性]]、
[CODE(DOMm)@en[[[abort]]]] [[メソッド]]は [[DOM水準3LS]] 仕様案の
[DFN[[CODE(DOMi)@en[[[DocumentLS]]]]]] [[界面]]に含まれていました。

(もっと前の[[原案]]が初出)

[2] [CITE@en-US[Document Object Model Load and Save]]
([TIME[2003-02-27 04:19:25 +09:00]] 版)
<http://www.w3.org/TR/2003/WD-DOM-Level-3-LS-20030226/load-save.html#LS-DocumentLS>

[1] [CITE@en-US[Document Object Model Load and Save]]
([TIME[2003-06-19 07:22:01 +09:00]] 版)
<http://www.w3.org/TR/2003/WD-DOM-Level-3-LS-20030619/load-save.html#LS-DocumentLS>

[4] [CITE@en-US[Document Object Model Load and Save]]
([TIME[2003-06-19 07:22:01 +09:00]] 版)
<http://www.w3.org/TR/2003/WD-DOM-Level-3-LS-20030619/load-save.html#LS-DocumentLS-async>

[6] [CITE@en-US[Document Object Model Load and Save]]
([TIME[2003-06-19 07:22:01 +09:00]] 版)
<http://www.w3.org/TR/2003/WD-DOM-Level-3-LS-20030619/load-save.html#LS-DocumentLS-load>

[5] [[DOM水準3LS]]の当時既に [[IE]] と [[Mozilla]] で実装されていたらしいのに、
なんで実装済みのこいつらを削除して、かわりに[[Webブラウザー]]でまったく実装されていない
[CODE(DOMi)@en[[[LSParser]]]] だけ[[勧告]]にしたのかまったく謎ですねwwwwwwww

[26] [[同一起源方針]]に関する仕様はありませんでした。

** HTML5

[27] [[Web互換性]]のために本メソッドは必要と言わざるをえないとして、
[[HTML5]] (現 [[HTML Standard]]) で改めて標準化されました。
動作の詳細はこの時初めて規定されてました。

;; 非同期モードのみで、同期モードはコメントアウトされていました。

[9] [CITE@en[HTML5 Revision Tracker]]
[CITE[Remove document.async and restrict document.load to createDocument() documents.]]
([TIME[2010-08-12 22:23:25 +09:00]] 版)
<http://html5.org/tools/web-apps-tracker?from=5284&to=5285>

[11] [CITE@en[983090 – Try to remove document.load]]
( ([TIME[2014-03-15 00:27:55 +09:00]] 版))
<https://bugzilla.mozilla.org/show_bug.cgi?id=983090>

[12] [CITE@en[Web Applications 1.0 r8800 Remove commented out SYNCLOAD stuff relating to XMLDocument.load()]]
( ([TIME[2014-09-20 08:22:00 +09:00]] 版))
<https://html5.org/r/8800>

[13] [CITE@en[Web Applications 1.0 r8799 Stop using the word 'asynchronously', and reduce usage of the word 'synchronous'.]]
( ([TIME[2014-09-20 08:19:00 +09:00]] 版))
<https://html5.org/r/8799>

[15] [CITE@en[Improve #sync-warning wording · 2747353 · whatwg/xhr]]
( ([TIME[2014-11-14 21:01:20 +09:00]] 版))
<https://github.com/whatwg/xhr/commit/2747353a3861ca72258d5393d7fa99712a85c011>

[16] [CITE@en[494705 – Deprecate DOM3 Load (XMLDocument.load)]]
( ([TIME[2015-01-07 11:40:17 +09:00]] 版))
<https://bugzilla.mozilla.org/show_bug.cgi?id=494705>

[42] [CITE@en[Integrate Fetch into HTML · whatwg/html@7c5555a]]
([TIME[2015-09-18 18:39:12 +09:00]] 版)
<https://github.com/whatwg/html/commit/7c5555a16f2920c02244c10756bb2f1a11e87a22>

[44] [CITE@en[URLs are parsed and produce records · whatwg/html@30bc255]]
([TIME[2016-02-14 22:53:24 +09:00]] 版)
<https://github.com/whatwg/html/commit/30bc2557105ad62881ec9670f253febbc9761b44>

[8] [CITE@en[Formalize custom element reactions · whatwg/html@27aa7bc]]
([TIME[2016-04-26 18:52:24 +09:00]] 版)
<https://github.com/whatwg/html/commit/27aa7bc4fa6f168654a8c858f0773e611f679b39>

[10] [CITE@en[Use USVString for all URLs]]
( ([[domenic]]著, [TIME[2016-05-20 22:02:29 +09:00]]))
<https://github.com/whatwg/html/commit/018b983b77b2cd908f6d00100e7e0abe893dd2c3>

[14] [CITE@en[Remove XMLDocument.prototype.load]]
([[domenic]]著, [TIME[2016-07-07 02:06:08 +09:00]])
<https://github.com/whatwg/html/commit/523f7a8773d2ab8a1eb0da6510651e8c5d2a7531>

[43] [CITE@en[Editorial: remove reference to XMLDocument.prototype.load]]
([[annevk]]著, [TIME[2016-07-07 02:09:50 +09:00]])
<https://github.com/whatwg/dom/commit/1595762e49358c7da9f6d6f284a3a3ae46987256>