/
952.txt
172 lines (133 loc) · 8.6 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
[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]]]]]] [[メソッド]]は、
次のようにしなければ[['''なりません''']] [SRC[>>36]]。
[FIG(steps)[
= [[文脈オブジェクト]]の[[閲覧文脈]]について [[navigate]] を実行中で、
それが [[unload a document]] を実行中でないなら、
== [[navigate]] を取り消します。
== [[文脈オブジェクト]]の[[閲覧文脈]]の[[活性文書]]の[[文書のabort]]を実行します。
]FIG]
* 文書の abort
[5] [[文書]]を [DFN[[[abort]]]] するとは、次のようにしなければ[['''なりません''']]
[SRC[>>4]]。
[FIG(steps)[
= [11] すべての[[子供閲覧文脈]]の[[活性文書]]を [[abort]] します。
= [12] 前項の [[abort]] によりいずれかの[[文書]]の [[''salvageable'']] が[[偽]]となったら、
[[文書]]の [[''salvageable'']] も[[偽]]に設定します。
= [13] [[文書]]における [[fetch]] があれば、すべて停止させ、関係する[[タスク]]を捨て、
[[ネットワーク]]から受信したデータがあっても捨てます。
これらがあった場合には、 [[文書]]の [[''salvageable'']] を[[偽]]に設定します。
= [14] [[文書]]が[[活性構文解析器]]を持っていれば、これを [[abort]] し、
[[文書]]の [[''salvageable'']] を[[偽]]に設定します。
]FIG]
[29] 「停止」ボタンは [[abort]] を呼び出します。
[30] [CODE(JS)@en[[[window.stop]]]] は [[abort]] を呼び出すことがあります。
[31] [[文書を捨てる]]際に [[abort]] が呼び出されます。
[32] [[navigate]] が [[abort]] を呼び出すことがあります。
[33] [CODE(JS)@en[[[document.open]]]] が [[abort]] を呼び出すことがあります。
;; [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]] [[要素]]からの呼び出しの場合、当該[[要素]]が最後の[[要素]]となり、
文書のソースの続きの部分は完全に無視されます。
[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]]
* 歴史
[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>