/
952.txt
266 lines (207 loc) · 11.8 KB
/
952.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
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
[28] [[文書]]や[[構文解析器]]を [DFN[[[abort]]]] すると、
[[fetch]] や[[構文解析器]]を中断することができます。
abort 操作は何種類かあります。
* 仕様書
[REFS[
- [69] [CITE@en-GB-x-hixie[HTML Standard]] ([TIME[2015-05-06 10:42:35 +09:00]] 版) <https://html.spec.whatwg.org/#current-document-readiness>
- [4] '''[CITE@en-GB-x-hixie[HTML Standard]] ([TIME[2015-04-25 04:40:19 +09:00]] 版) <https://html.spec.whatwg.org/#abort-a-document>'''
- [10] '''[CITE@en-GB-x-hixie[HTML Standard]] ([TIME[2015-04-25 04:40:19 +09:00]] 版) <https://html.spec.whatwg.org/#abort-a-parser>'''
- [36] [CITE@en-GB-x-hixie[HTML Standard]] ([TIME[2015-04-25 04:40:19 +09:00]] 版) <https://html.spec.whatwg.org/#dom-window-stop>
]REFS]
* 利用者インターフェイス
[6] [[利用者]]に[[文書]]に関する次の[[タスク]]を追加する方法を提供して構いません [SRC[>>4]]。
[FIG(list members)[
[FIGCAPTION[
[[タスク]]
]FIGCAPTION]
:処理:
[FIG(steps)[
= [[文書]]が[[活性文書]]なら、[[単純イベントを発火]]する[['''べきです''']]。
[FIG(list members middle)[
[FIGCAPTION[
[[単純イベント]]
]FIGCAPTION]
:[[イベント型]]:[CODE(DOMi)@en[[[abort]]]]
:[[対象]]:[[文書]]の [CODE(DOMi)@en[[[Window]]]]
]FIG]
= [[文書のabort]]を実行します。
]FIG]
]FIG]
;; [8] [[タスク源]]は不明です。
;; [7] この「[DFN[[[中止]]]]」 (「[DFN[[[停止]]]]」) 機能は、
かつては[[メニューバー]]の[[ボタン]]などとして提供するのが普通でした。
現在は[[再読込]]ボタンが [[navigate]] 中のみ[[中止]]ボタンに差し替わることが多くなっています。
([[再読込]]したい時にボタンが差し替わっているので不便だと思う人もいます。)
[38] [[Webブラウザー]]は [CODE(HTTP)@en[Refresh]] による遷移を拒む手段を提供することを認められています。
[[中止]]ボタンはその機能も持っているかもしれません。
;; [40] かつては[[アニメーションGIF]]の再生停止機能も[[中止]]ボタンが持っている
[[Webブラウザー]]もありました。
* [CODE(DOMi)@en[Window]] インターフェイス [CODE(DOMm)@en[stop]] メソッド
[37] [CODE(DOMi)@en[[[Window]]]] [[インターフェイス]]の
[DFN[[CODE(DOMm)@en[stop][window.stop]]]] [[メソッド]]は、
次のようにしなければ[MUST[なりません]] [SRC[>>36]]。
[FIG(steps)[
= [54]
[[文脈オブジェクト]]の[F[[[被関連付け[CODE[Document]]]]]]について、
[[文書読み込みを停止]]します。
]FIG]
[55]
[VAR[文書]]について[DFN[[RUBYB[文書読み込みを停止]@en[stop document loading]]]]するには、
次のようにします [SRC[[CITE[HTML Standard]]]]。
[FIG(steps)[
= [56] [VAR[文書]]の[F[活性文書]]が[[偽]]の場合、
== [57] ここで停止します。
= [58] [VAR[閲覧文脈]]を、
[VAR[文書]]の[F[閲覧文脈]]に設定します。
= [59]
[VAR[閲覧文脈]]について
[[navigate]]
を実行中で、
それが
[[unload a document]]
の実行中では''ない''場合、
== [60]
当該 [[navigate]] を取り消します。
= [61]
[VAR[文書]]を[[abort][文書のabort]]します。
]FIG]
[62] [CODE[window.stop]] や [CODE[document.open]] から呼び出されます。
* 文書の abort
[5] [[文書]][VAR[文書]]を
[DFN[[[abort]]]] するとは、次のようにしなければ[['''なりません''']]
[SRC[>>4]]。
[FIG(steps)[
= [11] すべての[[子供閲覧文脈]]の[[活性文書]]を [[abort]] します。
= [12] 前項の [[abort]] によりいずれかの[[文書]]の [[''salvageable'']] が[[偽]]となったら、
[[文書]]の [[''salvageable'']] も[[偽]]に設定します。
= [33] [[文書]]における [[fetch]] があれば、
== [49] [[文書]]の [F[''salvageable'']] を、[[偽]]に設定します。
= [13] [[文書]]における [[fetch]] [VAR[fetch]] について、それぞれ、
== [31] [VAR[fetch]] を[[abort][fetchのabort]]させます。
= [14]
[VAR[文書]]の[F[活性構文解析器]]が [CODE[null]]
で''ない'場合、
== [67]
[VAR[文書]]の[F[活性構文解析器がabortされた]]を、
[[真]]に設定します。
== [68]
[[構文解析器をabort]]します。
== [71]
[VAR[文書]]の
[F[''salvageable'']] を、
[[偽]]に設定します。
]FIG]
[29] 次の場面で、[[文書のabort]]が呼び出されることがあります。
[FIG(short list)[ [48] [[文書のabort]]の発生する場面
- 「[[停止]]」ボタン
- [[文書を捨てる]]
- [[navigate]]
- [[文書読み込みを停止]]
]FIG]
;; [42] [CODE(DOMi)@en[[[WebSocket]]]] や [CODE(DOMi)@en[[[EventSource]]]]
は、 [[unloading document cleanup steps]] で停止処理が呼び出されます。
[[unloading document cleanup steps]] は[[文書を捨てる]]などから呼び出されます
(から、 [[abort]] と必ずしも同じタイミングではありません)。 ([CODE(DOMi)@en[[[EventSource]]]]
は [[fetch]] でもあるので、両方の処理が実行されることになります。)
[44] [[構文解析器]]の [[abort]] が停止されますから、
[CODE(HTMLe)@en[script]] [[要素]]からの呼び出しの場合、当該[[要素]]が最後の[[要素]]となり、
文書のソースの続きの部分は完全に無視されます。
[30]
[[fetch]] が [[abort][fetchのabort]] されるため、[[同じ起源]]への[[接続][HTTP接続]]を使った大量の
[[fetch]] が進行中でも、それとは別に [[navigate]] のための新たな [[fetch]]
を開始できます。
[45] [[Chrome]] では、待機中の [CODE(HTTP)@en[Refresh]] も破棄されます。
[TIME[2016-09-26T11:45:23.200Z]]
* 構文解析器の abort
[9] [DFN[[RUBYB[[[構文解析器]]の [[abort]]]@en[abort a parser]]]]は、
次のようにしなければ[['''なりません''']]。
[FIG(steps)[
= [15] [[入力ストリーム]]の現在の未処理の内容および今後追加されるであろう内容を破棄します [SRC[>>10]]。
= [16] [[文書]]の[[現在文書準備度]]を [CODE[[[interactive]]]] に設定します [SRC[>>10]]。
= [70] [[単純イベントを発火]]します。 [SRC[>>69]]
[FIG(list members)[
[FIGCAPTION[
[[単純イベント]]
]FIGCAPTION]
:[[イベント型]]:[CODE(DOMe)@en[[[readystatechange]]]]
:[[対象]]:[[文書]]
]FIG]
= [17] [[開いている要素のスタック]]からすべての[[節点]]を [[pop]] します [SRC[>>10]]。
= [18] [[文書]]の[[現在文書準備度]]を [CODE[[[complete]]]] に設定します [SRC[>>10]]。
= [41] [[単純イベントを発火]]します。 [SRC[>>69]]
[FIG(list members)[
[FIGCAPTION[
[[単純イベント]]
]FIGCAPTION]
:[[イベント型]]:[CODE(DOMe)@en[[[readystatechange]]]]
:[[対象]]:[[文書]]
]FIG]
= [24] [[構文解析器]]の [[abort]] 済みフラグを設定します。
]FIG]
;; [19] [[pop]] は副作用を持つことがあります。[[開いている要素のスタック]]を参照。
;; [25] [[abort]] 済みフラグは、[[活性構文解析器]]かどうかの判定に用いられます。
[20] [[構文解析器]]の [[abort]] は、 [[HTML構文解析器]]でも [[XML構文解析器]]でも実行できます。
[21] [[構文解析器]]の [[abort]] は、[[文書のabort]] から呼び出されます。
[22] [[構文解析器]]の [[abort]] は、[[構文解析器]]が[[構文解析エラー]]を検出した時に呼び出すこともできます。
;; [23] これは[[適合性検査器]]など特別な用途を想定していて、[[Webブラウザー]]などでは不適切な動作です。
;; [39] [[abort]] は、 [[stops parsing]] により正常終了しない場合にかわりに呼び出されます。
[26] [[abort]] 済みフラグは、[[活性構文解析器]]かどうかの判定で用いられます。
[27] [[abort]] 済みフラグは、[[HTML構文解析器]]が [CODE(HTMLe)@en[[[script]]]]
[[終了タグ]]で[[スクリプト]]を実行するかに影響します。
[46] [[Chrome]] の [CODE(JS)@en[window.stop]] は、 [CODE[interactive]] の方の
[CODE(DOMe)@en[readystatechange]] を[[発火]]しないようです。 [TIME[2016-09-26T11:51:15.400Z]]
* その他の abort
[32]
[[fetchのabort]] も参照。
* 歴史
[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-abort>
[2] [CITE@en[(X)HTML5 Tracking]]
([TIME[2009-09-30 00:09:23 +09:00]] 版)
<http://html5.org/tools/web-apps-tracker?from=4038&to=4039>
[3] [CITE@en[Web Applications 1.0 r5643 Define how location.href='foo' aborts parsing.Fixing http://www.w3.org/Bugs/Public/show_bug.cgi?id=10625]]
( ([TIME[2010-10-23 08:07:00 +09:00]] 版))
<http://html5.org/tools/web-apps-tracker?from=5642&to=5643>
[34] [CITE[''''''[''''''whatwg'''''']'''''' Firing all the "the end" messages on abort]]
( ([TIME[2012-12-01 11:57:56 +09:00]] 版))
<http://lists.whatwg.org/pipermail/whatwg-whatwg.org/2012-November/038207.html>
[35] [CITE@en[Web Applications 1.0 r8142 Explain how window.stop() affects window.stop()]]
( ([TIME[2013-08-13 08:36:00 +09:00]] 版))
<http://html5.org/tools/web-apps-tracker?from=8141&to=8142>
[43] [CITE@en[Only set state to unsent in abort() when done · whatwg/xhr@36e8b3c]]
([TIME[2016-03-26 12:02:23 +09:00]] 版)
<https://github.com/whatwg/xhr/commit/36e8b3ce2b8ce7f7d08a4020a8dd6c72fcd73ba3>
[47] [CITE@en[Reset response for abort() during DONE]]
([[annevk]]著, [TIME[2017-01-24 23:24:44 +09:00]])
<https://github.com/whatwg/xhr/commit/daecfff02e0a95776f305097a752148071d58d07>
[50] [CITE@en[Editorial: modernize the style of various document-accepting algorithms]]
([[musgravejw]]著, [TIME[2018-05-03 01:20:53 +09:00]])
<https://github.com/whatwg/html/commit/8bd6fb3972aab1debd2c562b31617e7d3da2377b>
[51] [CITE@en[Various algorithms should take an explicit document argument · Issue #3638 · whatwg/html]]
([TIME[2018-05-03 11:19:53 +09:00]])
<https://github.com/whatwg/html/issues/3638>
[52] [CITE@en[Editorial: Add Document to argument list explicitly for document algorithms by musgravejw · Pull Request #3639 · whatwg/html]]
([TIME[2018-05-03 11:20:28 +09:00]])
<https://github.com/whatwg/html/pull/3639>
[53] [CITE@en[document.open(): only abort when there is a navigation]]
([[TimothyGu]]著, [TIME[2018-09-07 04:24:32 +09:00]])
<https://github.com/whatwg/html/commit/1ca520a308ffd6a3c5f7fc26a67338c145af8376>
[63] [CITE@en[Unclear what exactly should be aborted in document.open() · Issue #3975 · whatwg/html]]
([TIME[2018-10-14 20:11:36 +09:00]])
<https://github.com/whatwg/html/issues/3975>
[64] [CITE@en[document.open(): only abort when there is a navigation by TimothyGu · Pull Request #3999 · whatwg/html]]
([TIME[2018-10-14 20:12:53 +09:00]])
<https://github.com/whatwg/html/pull/3999>
[65] [CITE@en[Fix Window's close(d) members]]
([[annevk]]著, [TIME[2019-03-08 00:47:50 +09:00]])
<https://github.com/whatwg/html/commit/37b1ce5ed31725fa7b3c64e27e3cc10aa15a791f>
[66] [CITE@en[Ignore document.open/write after the active parser has been aborted]]
([[foolip]]著, [TIME[2019-10-16 17:25:18 +09:00]])
<https://github.com/whatwg/html/commit/ead4aa8ec576d7d330a04f7ec8508e336b895fdb>
[72] [CITE@en[Consider adding an "ignore document.open/write" flag on document · Issue #4723 · whatwg/html · GitHub]]
([TIME[2020-08-31 17:28:01 +09:00]])
<https://github.com/whatwg/html/issues/4723>
[73] [CITE@en[Ignore document.open/write after the active parser has been aborted by foolip · Pull Request #4907 · whatwg/html · GitHub]]
([TIME[2020-08-31 17:30:24 +09:00]])
<https://github.com/whatwg/html/pull/4907>