-
Notifications
You must be signed in to change notification settings - Fork 4
/
877.txt
178 lines (144 loc) · 10.3 KB
/
877.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
[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[[[DOMString]]]] として解釈します。
= [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]] しなければ[['''なりません''']]。
[[文脈オブジェクト]]の[[起源]]からとし、
[[referrer source]] は[[入口設定群オブジェクト]]によるものとし、
[[blocking flag]] と [[force same-origin flag]] を設定します。
[SRC[>>17]]
[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]
* 歴史
[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]]) で改めて標準化されました。
動作の詳細はこの時初めて規定されてました。
;; 非同期モードのみで、同期モードはコメントアウトされていました。
[8] [CITE[IRC logs: freenode / #whatwg / 20091009]]
([TIME[2009-12-08 00:45:57 +09:00]] 版)
<http://krijnhoetmer.nl/irc-logs/whatwg/20091009>
[9] [CITE@en[HTML5 Revision Tracker]]
([TIME[2010-08-12 22:23:25 +09:00]] 版)
<http://html5.org/tools/web-apps-tracker?from=5284&to=5285>
[10] [CITE@en[Last Week: Asynchronous script execution and GPU Acceleration by default « Peter Beverloo]]
( ([TIME[2010-09-26 23:09:35 +09:00]] 版))
<http://peter.sh/2010/09/last-week-asynchronous-script-execution-and-gpu-acceleration-by-default/>
[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>
[14] [CITE@en[Bug 22696 – inline <script async>]]
( ([TIME[2014-09-28 09:03:14 +09:00]] 版))
<https://www.w3.org/Bugs/Public/show_bug.cgi?id=22696>
[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>