[18] XMLDocument
インターフェイスの
load
メソッドは、
fetch を行い、文書の内容を得られた XML文書によって置き換えられるものです。
[32] 引き続き、並列に、次のような要求を fetch しなければなりません。
>>17
[33] fetch の応答のContent-Typeメタデータが XML MIME型の場合は、
新しいXML構文解析器を作成し、新しい Document
と関連付け、応答の本体をこのXML構文解析器により構文解析しなければなりません。
XML の整形式かつ名前空間整形式でない場合には、
新しい文書からすべての子供を削除しなければなりません。 >>17
[34] fetch 後、次のようなタスクをタスクキューに追加しなければなりません >>17。
[40] 名前空間整形式でない場合やエラーの場合は、 文脈オブジェクトの文書は空になります。
[1] DOM3LS WD にあったのと同じ or 似た意味の load
メソッドは、 MSXML (not MSHTML) や Gecko で実装されています。
[2] Hawk's W3 Laboratory : XML : JavaScriptでXMLを扱う方法 ( 版) <http://web.archive.org/web/20060902115316/www.hawk.34sp.com/stdpls/xml/js_xml.html>
MSXML では、 同期的に読み込みを行った場合、loadメソッドは読み込みの成否に応じて真偽値を返すので、parseErrorプロパティからIXMLDOMParseError オブジェクトにアクセスしてエラー情報を取り出すことができます。
ただしこの (
async
を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が読み込まれたとして扱われます。やはりエラーらしい動作は起こりません。
要素名や名前空間は旧仕様と同じですが、よく見比べると微妙に書式が異なっています。この違いにどの程度の意味があるのかは分かりませんので、あくまで参考に留めておいてください。
[7] load
メソッド、async
属性、
abort
メソッドは DOM水準3LS 仕様案の
DocumentLS
界面に含まれていました。
(もっと前の原案が初出)
[2] Document Object Model Load and Save ( 版) <http://www.w3.org/TR/2003/WD-DOM-Level-3-LS-20030226/load-save.html#LS-DocumentLS>
[1] Document Object Model Load and Save ( 版) <http://www.w3.org/TR/2003/WD-DOM-Level-3-LS-20030619/load-save.html#LS-DocumentLS>
[4] Document Object Model Load and Save ( 版) <http://www.w3.org/TR/2003/WD-DOM-Level-3-LS-20030619/load-save.html#LS-DocumentLS-async>
[6] Document Object Model Load and Save ( 版) <http://www.w3.org/TR/2003/WD-DOM-Level-3-LS-20030619/load-save.html#LS-DocumentLS-load>
[5] DOM水準3LSの当時既に IE と Mozilla で実装されていたらしいのに、
なんで実装済みのこいつらを削除して、かわりにWebブラウザーでまったく実装されていない
LSParser
だけ勧告にしたのかまったく謎ですねwwwwwwww
[27] Web互換性のために本メソッドは必要と言わざるをえないとして、 HTML5 (現 HTML Standard) で改めて標準化されました。 動作の詳細はこの時初めて規定されてました。
[9] HTML5 Revision Tracker Remove document.async and restrict document.load to createDocument() documents. ( 版) <http://html5.org/tools/web-apps-tracker?from=5284&to=5285>
[11] 983090 – Try to remove document.load ( ( 版)) <https://bugzilla.mozilla.org/show_bug.cgi?id=983090>
[12] Web Applications 1.0 r8800 Remove commented out SYNCLOAD stuff relating to XMLDocument.load() ( ( 版)) <https://html5.org/r/8800>
[13] Web Applications 1.0 r8799 Stop using the word 'asynchronously', and reduce usage of the word 'synchronous'. ( ( 版)) <https://html5.org/r/8799>
[15] Improve #sync-warning wording · 2747353 · whatwg/xhr ( ( 版)) <https://github.com/whatwg/xhr/commit/2747353a3861ca72258d5393d7fa99712a85c011>
[16] 494705 – Deprecate DOM3 Load (XMLDocument.load) ( ( 版)) <https://bugzilla.mozilla.org/show_bug.cgi?id=494705>
[42] Integrate Fetch into HTML · whatwg/html@7c5555a ( 版) <https://github.com/whatwg/html/commit/7c5555a16f2920c02244c10756bb2f1a11e87a22>
[44] URLs are parsed and produce records · whatwg/html@30bc255 ( 版) <https://github.com/whatwg/html/commit/30bc2557105ad62881ec9670f253febbc9761b44>
[8] Formalize custom element reactions · whatwg/html@27aa7bc ( 版) <https://github.com/whatwg/html/commit/27aa7bc4fa6f168654a8c858f0773e611f679b39>
[10] Use USVString for all URLs ( (domenic著, )) <https://github.com/whatwg/html/commit/018b983b77b2cd908f6d00100e7e0abe893dd2c3>
[14] Remove XMLDocument.prototype.load (domenic著, ) <https://github.com/whatwg/html/commit/523f7a8773d2ab8a1eb0da6510651e8c5d2a7531>
[43] Editorial: remove reference to XMLDocument.prototype.load (annevk著, ) <https://github.com/whatwg/dom/commit/1595762e49358c7da9f6d6f284a3a3ae46987256>