DocumentLS

XMLDocument インターフェイス load メソッド (DOM)

[18] XMLDocument インターフェイスload メソッドは、 fetch を行い、文書内容を得られた XML文書によって置き換えられるものです。

仕様書

処理

[19] 次のようにしなければなりません >>17

  1. [20] 必須の第1引数を USVString として解釈します。
  2. [21] 入口設定群オブジェクトAPI基底URLに対して最初の引数URLの解決を行います。
  3. [22] 解決に失敗したら、
    1. [23] SyntaxError 例外投げて停止します。
  4. [24] 得られたURL文脈オブジェクト同じ起源でなければ、
    1. [25] SecurityError 例外投げて停止します。
  5. [28] 文脈オブジェクト子供をすべて削除します。
  6. [29] 文脈オブジェクト現在文書準備度を、 loading に設定します。
  7. [72] 単純イベントを発火します。 >>30

    単純イベント

    イベント型
    readystatechange
    対象
    文脈オブジェクト
  8. [31] を返して停止します。

[32] 引き続き、並列に、次のような要求fetch しなければなりません>>17

要求

URL
得られた URL
クライアント
入口設定群オブジェクト
終点
subresource
同期フラグ
設定する
モード
同じ起源
credentialsモード
same-origin
URL credentials利用フラグ
設定する

[33] fetch応答Content-TypeメタデータXML MIME型の場合は、 新しいXML構文解析器を作成し、新しい Document と関連付け、応答本体をこのXML構文解析器により構文解析しなければなりませんXML整形式かつ名前空間整形式でない場合には、 新しい文書からすべての子供を削除しなければなりません>>17

[34] fetch 後、次のようなタスクタスクキューに追加しなければなりません >>17

タスク

タスク源
?
処理
  1. [35] 文脈オブジェクト現在文書準備度を、 complete に設定します。
  2. [36] 単純イベントを発火します。 >>30

    単純イベント

    イベント型
    readystatechange
    対象
    文脈オブジェクト
  3. [37] 新しい文書 (あれば) の子供を、すべて新しい DocumentFragment子供とします。
  4. [38] DocumentFragment文脈オブジェクト挿入します。
  5. [39] 単純イベントを発火します。 >>30

    単純イベント

    イベント型
    load
    対象
    文脈オブジェクト

[40] 名前空間整形式でない場合やエラーの場合は、 文脈オブジェクト文書は空になります。

[41] 一般にWebブラウザーは実際には XML 1.0 に厳密に従っておらず、 エラーとするかそうでないかの条件が異なっています。ここでも XML 仕様ではなく、WebブラウザーにおけるXMLの動作に倣うものと思われます。

歴史

[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 オブジェクトにアクセスしてエラー情報を取り出すことができます。

ただしこの (asyncfalse にする) 方法は古いバージョンの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] 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の当時既に IEMozilla で実装されていたらしいのに、 なんで実装済みのこいつらを削除して、かわりにWebブラウザーでまったく実装されていない LSParser だけ勧告にしたのかまったく謎ですねwwwwwwww

[26] 同一起源方針に関する仕様はありませんでした。

HTML5

[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>