/
761.txt
495 lines (419 loc) · 30.1 KB
/
761.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
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
* 仕様書
[REFS[
- [12] [CITE@en-GB-x-hixie[HTML Standard]] ([TIME[2015-04-25 04:40:19 +09:00]] 版) <https://html.spec.whatwg.org/#navigate>
]REFS]
* 文脈
[16] [[navigate]] は、[[仕様書]]で規定されている手順により ([[著者]]の指示により)
実行される場合もあれば、[[利用者エージェント]]依存の方法で ([[利用者]]の直接の指示により)
実行される場合もあります。
[EG[
[17] 前者の例として [CODE(JS)@en[[[location.href]]]] の設定が、
後者の例として[[アドレスバー]]からの [[URL]] の指定があります。
]EG]
[13] [[navigate]] を発生させる操作には、例えば次のものがあります。
[FIG(short list)[
- [[ハイパーリンクをたどる]]
- [[フォーム提出]]
- [CODE(JS)@en[[[window.open]]]]
- [CODE(JS)@en[[[location.assign]]]]
- [CODE(JS)@en[[[location.href]]]]
- [CODE(JS)@en[[[location.reload]]]]
- [[アドレスバー]]、[[メニュー]]、[[DnD]]、[[WebDriver]] 等からの [[URL]] の指定
- [[履歴]]の移動操作
- [[再読込]]操作
- [[栞]]の選択
- [[コマンドライン引数]]等の他の[[アプリケーション]]からの [[URL]] の指定
- [[navigate]] によって生成された[[利用者]]に対する選択肢の実行
]FIG]
* 入力
[41] [[navigate]] には、次の入力 ([[引数]]) があります。最初の3つは必須です。
[FIG(list members)[
:[14] [[navigate]] する[[閲覧文脈]]:[[navigate]] によって新しい[[資源]]を表示するべき[[閲覧文脈]]です。
:[21] 新しい[[資源]]:[[navigate]] する[[閲覧文脈]]に新たに表示するべき[[資源]]です。
ここで[[資源]]は次のものによって表されます。
[FIG(list)[
- [[URL]]
- [[要求メソッド]]
- [[フォーム提出アルゴリズム]]からの呼び出しか否か
- [[fetch]] 時の [[referrer]]
- その他 [[fetch]] に必要な引数
- 場合によっては、 [[fetch]] の結果
[EG[
[24] [CODE(HTMLe)@en[[[object]]]] [[要素]]の処理では、[[資源]]の [[fetch]]
が終わってから [[navigate]] が呼び出されます。
]EG]
[EG[
[55] [[navigate]] の結果表示される [[navigate]] の選択肢を[[利用者]]が選んだ場合にも、
(再度 [[fetch]] するのは無駄なので) [[fetch]] 結果付きで [[navigate]] を呼び出すべきかもしれません。
]EG]
]FIG]
:[15] [DFN[[RUBYB[原始閲覧文脈]@en[source browsing context]]]]:
[[navigate]] の開始に責任を持つ[[閲覧文脈]]です [SRC[>>12]]。
[[原始閲覧文脈]]は、 [[navigate]] される[[閲覧文脈]]について
[[navigate]] を認められているか、いないかのいずれかです。
:[20] [DFN[[RUBYB[明示的自己ナビゲーション上書き]@en[explicit self-navigation override]]]] [SRC[>>12]]:
[[navigate]] する[[閲覧文脈]]の選択方法についてのフラグです。
:[19] [DFN[[RUBYB[例外有効]@en[exceptions enabled]]]] [SRC[>>12]]:
[[例外]]を投げるかどうかのフラグです。
:[22] [DFN[[[reload-triggered navigation]]]] [SRC[>>12]]:[[再読込]]操作かどうかのフラグです。
:[43] [DFN[[RUBYB[上書きURL][override URL]]]] [SRC[>>12]]:[[文書の番地]]として使う [[URL]]
です。
:[65] [[ポップアップ]]が認められるか否か:外部アプリケーションを起動するべきかどうかに影響します。
]FIG]
* navigate の開始
[18] [[利用者エージェント]]は、 [[navigate]] を次のように行わなければ[['''なりません''']]
[SRC[>>12]]。
[FIG(steps)[
= [[ストレージミューテックス]]を解放します。
= [[原始閲覧文脈]]が当該[[閲覧文脈]]を [[navigate]] することを認められていなければ、
== [[利用者エージェント]]は、[[利用者]]に次の選択肢を提示しても構いません。
ただしこれらの操作は[[著者]]の[[砂箱化]]の要求を無視する場合もあり、危険かもしれません。
==- 新しい[[最上位閲覧文脈]]を開き、そちらをかわりに [[navigate]]
==- [[原始閲覧文脈]]の[[最上位閲覧文脈]]をかわりに [[navigate]]
== [[例外有効]]なら、 [CODE(DOMe)@en[[[SecurityError]]]] [[例外]]を投げます。
== 停止します。
=
[FIG(list)[
- [[原始閲覧文脈]]が [[navigate]] する[[閲覧文脈]]と同じで、
- [[seamless browsing context flag]] が設定されていて、
- [[navigate]] する[[閲覧文脈]]が[[明示的自己ナビゲーション上書き]]フラグ無しで選ばれたなら、
]FIG]
... [[seamless browsing context flag]] が設定されていない直近の[[祖先閲覧文脈]]を
[[navigate]] する[[閲覧文脈]]とします。
=
[FIG(list)[
- [[原始閲覧文脈]]と [[navigate]] する[[閲覧文脈]]が同じで、
- [[navigate]] する[[閲覧文脈]]が他の [[navigate]] を実行中で、
- その [[navigate]] が [[unload a document]] を実行中で、
- その [[navigate]] の[[資源]]の [[URL]] の[[起源]]と本 [[navigate]] の[[資源]]の [[URL]]
の[[起源]]が[[同じ起源]]では''ない''なら、
]FIG]
... ここで停止します。
= [[traverse the history by a delta]] により[[タスクキュー]]に入れられた[[タスク]]が
[[navigate]] する[[閲覧文脈]]の[[活性文書]]について [[unload a document]] を走らせている場合、
ここで停止します。
= [[navigate]] する[[閲覧文脈]]の[[活性文書]]について [[prompt to unload a document]]
が走っている場合、ここで停止します。
= [VAR[gone async]] を[[偽]]に設定します。
= '''[[素片識別子]]''':
[FIG(list)[
- [[reload-triggered navigation]] でなく、
- 新しい[[資源]]の [[URL]] と [[navigate]] する[[閲覧文脈]]の[[活性文書]]の[[文書の番地]]
(を[[構文解析]]したもの) が[[素片識別子]]以外すべて同じで、
- 新しい[[資源]]に[[素片識別子]]があり ([[空文字列]]を含む。)、
- 新しい[[資源]]の[[要求メソッド]]が [CODE(HTTP)@en[[[GET]]]] なら、
]FIG]
... [[素片識別子にnavigate]]します。ここで停止します。
= [VAR[gone async]] が[[偽]]なら、
同じ[[閲覧文脈]]に関する既存の未 [[mature]] の [[navigate]] があれば、取り消します。
@@ そこから [[fetch]] が実行されていれば、それも取り消します。
更に[[文書]]オブジェクトの作成と[[文書オブジェクトを初期化]]が実行されていれば、
[[文書のabort]]を実行します。
= 新しい[[資源]]を[[閲覧文脈]]外で処理する場合 (>>48) は、そのように処理し、停止します。
= [VAR[gone asnyc]] が[[偽]]なら、 [[prompt to unload a document]] を実行します。
== 実行中に本 [[navigate]] が取り消された場合でも、
[[prompt to unload a document]] は完了させなければなりません。
== [[refused to allow the document to be unloaded]] なら、ここで停止します。
= [VAR[gone async]] が[[偽]]なら、[[閲覧文脈]]の[[活性文書]]について[[文書のabort]]
を実行します。
= 新しい[[資源]]を[[閲覧文脈]]内で非[[文書]]として表示する (>>47) なら、
そのように処理し、停止します。
= [[navigate]] する[[閲覧文脈]]が[[入れ子閲覧文脈]]の場合は、これを
[[delaying [CODE(DOMe)@en[load]] events mode]] に追加します。
@@ 本 [[navigate]] が [[mature]] となるか、終了するかの最初の時点で、
[[delaying [CODE(DOMe)@en[load]] events mode]] から削除します。
= [[資源]]を [[fetch]] した結果がまだ無いなら、
== 新しい[[資源]]の [[URL scheme]] が [CODE(URI)@en[[[javascript:]]]] なら、
[CODE(URI)@en[[[javascript:]]]] の [[navigate]] を実行します。
==- [[navigate]] する[[閲覧文脈]]、[[資源]]、[[始点閲覧文脈]]、[[上書きURL]]
が [CODE(URI)@en[[[javascript:]]]] の [[navigate]] でも参照されます。
==- [[fetch]] 同様、[[非同期的]]に[[応答]]が得られます。
==
[FIG(list)[
- 新しい[[資源]]の[[要求メソッド]]が [CODE(HTTP)@en[[[GET]]]] で、
- 新しい[[資源]]の [[URL]] と[[同じ起源]]の [[URL]] を持つ [[relevant application cache]] があり、
- その [[AppCache]] [[エントリー]]のいずれかが新しい[[資源]]の [[URL]] を持ち、
- ただしその[[エントリー]]は [[foreign]] ではなく、
- その [[mode]] が [[fast]] であり、
- [[利用者エージェント]]が[[AppCache]]を使わないモードでなければ、
]FIG]
... [[最適AppCache]]からの新しい[[資源]]の [[fetch]]
を呼び出します。
==- [[フォーム提出アルゴリズム]]からの呼び出しなら、
呼び出し元の[[起源]]は[[始点閲覧文脈]]の[[活性文書]]の[[起源]]に (あれば) します。
== それ以外なら、 [[manual redirect flag]] 付きで新しい[[資源]]の [[fetch]] を呼び出します。
==- [[要求メソッド]]が非 [CODE(HTTP)@en[[[GET]]]] であるか、
[[フォーム提出アルゴリズム]]からの呼び出しなら、
呼び出し元の[[起源]]は[[始点閲覧文脈]]の[[活性文書]]の[[起源]]に (あれば) します。
==- それ以外で、 [[navigate]] する[[閲覧文脈]]が[[子供閲覧文脈]]なら、
呼び出し元の[[起源]]は [[navigate]] する[[閲覧文脈]]の[[閲覧文脈包含子]]の[[閲覧文脈適用範囲起源]]に (あれば) します。
= [VAR[gone async]] が[[偽]]なら、呼び出し元に戻します。続きの手順も[[非同期的]]に継続します。
= [VAR[gone async]] を[[真]]にします。
= [[fetch]] していれば、[[資源]]のバイトをいくらか利用できるようになるか、
空であると決定できるまで待ちます。この間、[[利用者]]が [[navigate]]
を取り消しできても構いませんし、他の [[navigate]] を開始できても構いません。
= [[fetch]] して[[リダイレクト]]が得られたなら、
== [[リダイレクト]]先の [[URL]] が元の[[資源]]の [[URL]] と[[同じ起源]]か、
[[要求メソッド]]が [CODE(HTTP)@en[[[POST]]]] か[[安全なメソッド]]なら、
[[リダイレクト]]先の[[資源]]に変更して[[素片識別子]]の段に戻ります。
==- ただし[[リダイレクト]]先の[[資源]]の [[URL]] に[[素片識別子]]がなく、
元の[[資源]]の [[URL]] に[[素片識別子]]があれば、[[リダイレクト]]先の[[資源]]の [[URL]]
にその[[素片識別子]]を付け足します。
== それ以外なら、
=== [[セキュリティー]]上の理由で [[navigate]] を停止したことを[[利用者]]に示しても構いません。
=== ここで停止します。
= '''Fallback in prefer-online mode''':
[FIG(list)[
- [[資源]]を [[AppCache]] から [[fetch]] した場合で、
- 新しい[[資源]]の[[要求メソッド]]が [CODE(HTTP)@en[[[GET]]]] で、
- 新しい[[資源]]の [[URL]] と[[同じ起源]]の [[URL]] を持つ [[relevant application cache]] があり、
- その [[AppCache]] [[エントリー]]のいずれかが新しい[[資源]]の [[URL]] を持ち、
- ただしその[[エントリー]]は [[foreign]] ではなく、
- その [[mode]] が [[prefer-online]] であり、
- [[利用者]]が [[navigate]] を停止させておらず、
- [[navigate]] が失敗 ([[DNS]] エラー、 [CODE(HTTP)[[[4xx]]]] や [CODE(HTTP)[[[5xx]]]]
など) であるなら、
]FIG]
== [[最適AppCache]]から新しい[[資源]]の [[URL]] で識別されるエントリーを得ます。
== そのエントリーが [[foreign]] でないなら、失敗したもののかわりに得られたエントリーを使います。
なおこの場合[[利用者]]に対して失敗したこととキャッシュを使うことを示して構いません。
= '''Fallback for fallback entries''':
[FIG(list)[
- [[資源]]を [[AppCache]] から [[fetch]] しなかった場合で、
- 新しい[[資源]]の[[要求メソッド]]が [CODE(HTTP)@en[[[GET]]]] で、
- 新しい[[資源]]の [[URL]] が [[relevant application cache]] の [[fallback namespace]]
に一致する場合で、
- その[[最適AppCache]]の [[online whitelist]] に新しい[[資源]]の [[URL]] と[[同じ起源]]の [[URL]] を持ち、新しい[[資源]]の [[URL]] の先頭と一致するようなエントリーが無く、
- [[利用者]]が [[navigate]] を停止させておらず、
- [[navigate]] が失敗 ([[DNS]] エラー、 [CODE(HTTP)[[[4xx]]]] や [CODE(HTTP)[[[5xx]]]]
など) であるなら、
]FIG]
== [[最適AppCache]]の [[fallback namespace]] に対する [[fallback resource]] を得ます。
== そのエントリーが [[foreign]] でないなら、失敗したもののかわりに得られたエントリーを使います。
なおこの場合[[利用者]]に対して失敗したことと [[fallback resource]]
を使うことを示して構いません。
= プロトコルの指示による処理 (>>26) があれば実行し、停止します。
= [[MIME型]]依存の処理 (>>44) を実行し、停止します。
]FIG]
* プロトコルの指示による処理
[26] [[navigate]] により [[fetch]] (相当) を行い、
[[HTTP]] や [[TLS]] 等の[[プロトコル]]から ([[MIME型]]以外の)
処理の指示と解釈できる[[メタデータ]]を与えられた場合には、
[[fetch]] (相当) の結果の処理ではなく、当該[[メタデータ]]に基づく処理を行います。
[25] [[HTML Standard]] はほとんど具体的な処理を規定せず、
いくつか例示するにとどまっていますが (プロトコル側で規定するべきと考えているのでしょう)、
次の処理が行われるようです。
[FIG(list)[
- [51] [[状態符号]] [CODE(HTTP)[[[204]]]] [SRC[>>12]] なら、何もしません。
- [52] [[ネットワークエラー]]、[[TLS証明書]]エラー [SRC[>>12]] なら、非[[文書]]として表示 (>>47)
します。
- [53] [CODE(HTTP)@en[[[Content-Disposition:]] [[attachment]]]] なら、
[[ダウンロード]]とし[['''なければなりません''']]。 [SRC[>>12]]
- [54] [[状態符号]] [CODE(HTTP)[[[401]]]] で [[challenge]] があれば、
[[認証]]の[[モーダルダイアログ]]を表示します。
]FIG]
[27] ここで、[[利用者エージェント]]が認識できる [[challenge]] を含まない
[CODE(HTTP)[[[401]]]] [[応答]]は、 [CODE(HTTP)[[[200]]]]
[[応答]]同様に扱わなければ[['''なりません''']] [SRC[>>12]]。
[28] [[利用者エージェント]]は [CODE(HTTP)[[[401]]]] [[応答]]で認識できる [[challenge]]
を含む場合であっても、[[応答]]を表示した上で、
非[[モーダルダイアログ]]によって[[ログイン]]できるようにしても構いません [SRC[>>12]]。
* MIME 型依存の処理
[44] [[navigate]] により [[fetch]] (相当) を行い最終的に処理するべき[[資源]]が確定したら、
その[[資源]]の[[MIME型]]によって適切な処理を行います。
[45] ここで [[MIME型]]は、 [[sniffed MIME type]] を使わなければ[['''なりません''']]
[SRC[>>12]]。
;; [[MIME Sniffing]] の規定に基づき、 [[HTTP]] [CODE(HTTP)@en[[[Content-Type:]]]]
[[ヘッダー]]を無視することがあります。
[46] [[利用者エージェント]]は、[[MIME型]]と設定に基づき次のいずれかの処理を行わなければ[['''なりません''']] [SRC[>>12]]。
[FIG(list)[
- [[閲覧文脈]]内で[[文書]]を[[レンダリング]]する (>>30)
- [[閲覧文脈]]内で非[[文書]]を表示する (>>47)
- [[閲覧文脈]]に影響しない処理を行う (>>48)
]FIG]
[50] いずれを選択するかは実装や設定に依存します。 [[HTML Standard]]
仕様上「設定により」となっており、完全には規定されていませんが、
実際上は任意の動作が許されているわけではありません。例えば
[CODE(MIME)@en[[[text/html]]]] を常に[[ダウンロード]]として扱うような実装は
[[Web互換]]とは言えません。
[68] [[著者]]は、[[Webブラウザー]]の実装や設定によって挙動が変わり得る
[[MIME型]]を使わないよう、使う場合は特定の挙動を仮定しないよう注意するべきでしょう。
[EG[
[69] 例えば [[PDF]] が[[プラグイン]]により表示されるか、外部アプリケーションにより表示されるか仮定するべきではありません。
]EG]
* 閲覧文脈内の文書レンダリング
[30] [[閲覧文脈]]内に内容を[[レンダリング]]する方法は、
次の各 [[MIME型]]について規定されています。
[FIG(short list)[
- [31] [[HTML文書]]
-- [CODE(MIME)@en[[[text/html]]]] [SRC[>>12]]
- [32] [[XML文書]] (>>33 も参照)
-- [CODE(MIME)@en[[[application/xml]]]] [SRC[>>12]]
-- [CODE(MIME)@en[[[text/xml]]]] [SRC[>>12]]
-- [CODE(MIME)@en[[[image/svg+xml]]]] [SRC[>>12]]
-- [CODE(MIME)@en[[[application/xhtml+xml]]]] [SRC[>>12]]
-- [[明示的対応XML型]]以外の [[XML MIME型]] [SRC[>>12]]
- [35] [[平文]]
-- [CODE(MIME)@en[[[text/plain]]]] [SRC[>>12]]
-- [[平文]]とみなされるいくつかの [[MIME型]] [SRC[仕様なし]]
- [36] [CODE(MIME)@en[[[multipart/x-mixed-replace]]]]
-- [CODE(MIME)@en[[[multipart/x-mixed-replace]]]] [SRC[>>12]]
- [37] [[媒体]]
-- 対応している[[画像形式]]、[[動画形式]]、[[音声形式]] [SRC[>>12]]
- [38] [[プラグイン]]
-- 外部アプリケーションを使って[[閲覧文脈]]内に内容を[[レンダリング]]する型 [SRC[>>12]]
]FIG]
[42] [DFN[[RUBYB[明示的対応XML型]@en[explicitly supported XML type]]]]は、
内容を外部アプリケーションによって ([[プラグイン]]として[[閲覧文脈]]内に、または外部に) 表示するよう設定されている、
[[利用者エージェント]]が特別な処理を行う (例えば組み込みの[[フィードビューアー]]を使う)、
専用の取り扱い器がある (例えば [CODE(DOMm)@en[[[registerContentHandler]]]] により設定されている)
といったものを指します [SRC[>>12]]。
[70] 次のような[[タスク]]を[[ネットワークタスク源]]で[[キュー]]に追加しなければ[['''なりません''']]
[SRC[>>12]]。
[FIG(steps)[
= [CODE(DOMi)@en[[[Document]]]] を作成します。
= [[MIME型]]などを設定します。
= [[文書オブジェクトの初期化]]を実行します。
= [[構文解析器]]を作成し、[[文書]]を関連付けます。
= これより後、[[スクリプト]]の実行や [[stop parsing]] よりも前に、
(他のモードに移行 (>>33) していなければ)
[[update the session history with the new page]] を実行します。
]FIG]
;; [79] [[XML文書]]の場合[[タスクキュー]]に追加しなければならないと仕様書には明記されていませんが、
おそらくそうすることが想定されていると思われます。もっともそうしないとしても[[著者]]から違いを観測できるのか不明です。できたとしても困難と思われます。
[75] [[MIME型]]の設定においては、[[XML文書]]以外の時は[[文書]]の
[[HTML文書]]フラグを設定しなければ[['''なりません''']] [SRC[>>12]]。
[[プラグイン]]の時は[[プラグイン文書]]フラグを設定する[['''べきです''']] [SRC[>>12]]。
また[[文書]]の[[内容型]]を [[HTML文書]]なら [CODE(MIME)@en[[[text/html]]]] に、
[[平文]]なら [CODE(MIME)@en[[[text/plain]]]] に設定しなければ[['''なりません''']] [SRC[>>12]]。
[[媒体]]や[[プラグイン]]なら [[sniffed MIME type]] に設定する[['''べきです''']] [SRC[>>12]]。
;; [76] [[XML文書]]の場合の[[文書]]の[[内容型]]の設定の規定はなぜかありません。
[77] [[構文解析器]]は、 [[HTML文書]]なら[[HTML構文解析器]]、
[[XML文書]]なら[[XML構文解析器]]です。
ただし[[平文]]の場合は[[テキストファイルのDOM構築]]方法を使います。
[[媒体]]の場合は[[構文解析器]]のかわりに[[媒体文書]]のDOMを構築し、
[[プラグイン]]の場合は[[構文解析器]]のかわりに[[プラグイン文書]]のDOMを構築します。
;; [72] [[構文解析器]]は、 [[fetch]] によって得られた[[応答]]の [[MIME型]]に含まれる[[文字符号化]]の指定を入力として受け取ります。
ここでの [[MIME型]]は、 [[sniffed MIME type]] ではありません [SRC[>>12]]。
[71] [[fetch]] が受信した[[バイト]]列を引き渡す[[ネットワークタスク源]]の[[タスク]]は、
ここで作成された[[構文解析器]]の[[入力バイト列]]に受信した[[バイト列]]を連結して、
適宜処理を行わなければ[['''なりません''']] [SRC[>>12]]。
[73] [[fetch]] が受信を終えたら、 [[構文解析器]]の入力として暗黙の [[EOF]]
文字を与えて処理させる[[ネットワークタスク源]]の[[タスク]]を[[キュー]]に追加しなければ[['''なりません''']]
[SRC[>>12]]。
[74] [[構文解析器]]は、構文解析中のいずれかのタイミングで[[文書の文字符号化]]を設定します。
[78] [[構文解析器]]や[[プラグイン文書]]の構築処理は、[[文書要素]]を[[文書に挿入]]するタイミングで
[[AppCache選択アルゴリズム]]を実行します [SRC[>>12]]。
[33] [[XML文書]]の場合、[[文書要素]]の[[名前空間]]によっては他の方法 (>>47、>>48)
で表示することにしても構いません [SRC[>>12]]。
[EG[
[34] 例えば[[フィード]]は、[[XML]] として [[DOM]] を表示するのではなく、
[[Webブラウザー]]組み込みの[[フィードビューアー]]により表示できます [SRC[>>12]]。
]EG]
;; [82] その場合、(少なくても仕様書のアルゴリズム上は) 作成されかけた
[[XML文書]]オブジェクトに[[著者]]がアクセスする方法はありません。
* 閲覧文脈内の非文書表示
[47] [[閲覧文脈]]内であっても [[DOM]] を[[レンダリング]]するのではなく、
専用ビューアーやエラーメッセージなど特別なものを表示する場合があります。
;; [49] 仕様書では[[閲覧文脈]]内に表示することを“[RUBYB[行内]@en[inline]]”と言っています。
[59] [[fetch]] (相当) を行う前にこちらの処理方法に移行する場合と、
[[fetch]] 結果をこちらの方法で処理する場合があります。
[EG[
[23] 例えば [[URL scheme]] に対応していないエラーを表示部に示す場合や、
[CODE(DOMm)@en[[[registerProtocolHandler]]]] で登録された取り扱い器を[[利用者]]に選択する画面を表示部に示す場合があります。
(選択した取り扱い器を実行する場合は、 [[navigate]] を改めて実行することになります。)
[SRC[>>12]]
]EG]
[EG[
[60] 例えば大多数の [CODE(URI)@en[[[about:]]]] [[URL]] のように [[fetch]]
ではアクセスできない特別な [[Webページ]]を表示させる場合が該当するかもしれません。
]EG]
[EG[
[39] 例えば内容を ([[DOM]] ではなく) 専用の方法で表示する場合、
[[MIME型]]に対応していないエラーを表示部に示す場合や、
[CODE(DOMm)@en[[[registerContentHandler]]]] で登録された取り扱い器を[[利用者]]に選択する画面を表示部に示す場合があります。
(選択した取り扱い器を実行する場合は、 [[navigate]] を改めて実行することになります。)
]EG]
[EG[
[81] [[Webブラウザー]]と[[MUA]]が統合された製品で、それぞれが別の[[窓]]を開くのではなく、
[[閲覧文脈]]内に [[MUA]] 機能が表示されるような場合は、 [[MUA]]
機能の表示は本項に該当しそうです。
]EG]
[83] 前項の通り、[[著者]]からは (ダミーの) [[DOM]] [[文書]]が存在しているように見えます。
それがどの程度実際の[[内容]]や[[レンダリング]]と連動しているかは、実装に依存します。
* 閲覧文脈外の処理
[48] [[閲覧文脈]]に影響せずに新しい[[資源]]を処理する場合もあります。
[57] [[fetch]] (相当) を行う前にこちらの処理方法に移行する場合と、
[[fetch]] 結果をこちらの方法で処理する場合があります。
[EG[
[29] 例えば [[fetch]] 前の時点で [[URL scheme]] に対応していないので無視する場合があります
[SRC[>>12]]。
]EG]
[EG[
[58] [[fetch]] 前の時点で [[URL]] を外部アプリケーションに引き渡す場合
(例えば [CODE(URI)@en[[[mailto:]]]] [[URL]] を [[MUA]] に渡す場合 [SRC[>>12]]) があります。
]EG]
[EG[
[40] 例えば [[fetch]] 結果を外部アプリケーションによって処理したり、
未知の[[MIME型]]なので[[ダウンロード]]として処理したりします [SRC[>>12]]。
;; [56] 多くの [[Webブラウザー]]では、どう処理するか[[利用者]]に問い合わせる
(非モーダル) [[ダイアログ]]を表示します。
[EG[
[61] [[fetch]] した [[Word]] 文書を[[ワープロ]]アプリケーションに引き渡す場合があります
[SRC[>>12]]。
]EG]
]EG]
[62] [[利用者エージェント]]は、外部アプリケーションに引き渡す場合は、
[[著者]]による対象ソフトウェアの悪用を防ぐよう努力する[['''べきです''']] [SRC[>>12]]。
[EG[
[63] 例えば、[[原始閲覧文脈]]の[[活性文書]]の[[文書の起源]]が当該ソフトウェアを起動することを認められているかを[[利用者]]に確認させることができます [SRC[>>12]]。
]EG]
[64] 特に[[ポップアップ]]が認められない場合には、事前の[[利用者]]の確認無しで外部ソフトウェアを起動する[['''べきではありません''']] [SRC[>>12]]。
;; [67] 外部アプリケーションの実行自体が[[ブラクラ]]となり得ます。
[[同じ起源]]や[[利用者]]により既に認められた[[起源]]であっても、
何度も重ねて起動することは抑制するべきでしょう。
また様々な異なる外部アプリケーションを次々と起動しようとすることも抑制するべきでしょう。
;; [80] ここでいう外部アプリケーションとは、実装方法によらず、[[閲覧文脈]]や[[ダウンロード]]など
[[Webブラウザー]]の機能以外を指すものと思われます。例えば [[Webブラウザー]]と [[MUA]]
が統合され同一[[プロセス]]で動作する製品があったとしても、
その [[MUA]] は外部アプリケーションと解釈するべきでしょう。
また[[ダウンロード]]や[[証明書ダウンロード]]のような [[Webブラウザー]]内の機能も、
[[ブラクラ]]化を防ぐなど類似した配慮が必要かもしれません。
[66] [[実行可能ファイル]]など、ダウンロード後の実行には特に注意しなければならない場合もあります。
;; [[ダウンロード]]も参照。
* 歴史
[1] [CITE@en[Web Applications 1.0 r5685 Make form submission via .submit(), and page navigation via location.href, when either is done before the page has completely loaded, result in a history replacement (like a redirect) rather than a regular load.]]
( ([TIME[2010-11-30 10:22:00 +09:00]] 版))
<http://html5.org/tools/web-apps-tracker?from=5684&to=5685>
[2] [CITE@en[Web Applications 1.0 r5686 Change pushState() and replaceState() so that they update the pending state object as well (otherwise, pushState vs pushState;back;forward would result in different state objects in the initial popostate which is just silly).]]
( ([TIME[2010-11-30 11:07:00 +09:00]] 版))
<http://html5.org/tools/web-apps-tracker?from=5685&to=5686>
[3] [CITE[''''''[''''''whatwg'''''']'''''' pushState and session history issues]]
( ([TIME[2010-11-30 23:35:29 +09:00]] 版))
<http://lists.whatwg.org/htdig.cgi/whatwg-whatwg.org/2010-November/029234.html>
[8] [CITE@en[Web Applications 1.0 r6630 Define navigating to video and audio resources]]
( ([TIME[2011-10-05 09:02:00 +09:00]] 版))
<http://html5.org/tools/web-apps-tracker?from=6629&to=6630>
[9] リンクのクリック時に [CODE(DOMa)@en[[[click]]]] で [CODE(HTMLe)@en[[[img]]]] を使って [[fetch]]
を行うと、 [[IE10]] ではアクセスが発生しますが、 [[Firefox]] と [[Chrome]] ではアクセスが来ません。
[CODE(DOMa)@en[[[mousedown]]]] だと [[Chrome]] はアクセスが来ますが、応答を受け取ったり受け取れなかったりするようです。
[[Chrome]] の場合 [[navigation]] によってアクセスが中断され、そのタイミングによって要求が送られたり送られなかったり、
応答を処理できたりできなかったりするようです。 [TIME[2013-07-04T03:10:59.800Z]]
[10] [CITE[''''''[''''''whatwg'''''']'''''' scrdoc and session history don't play along in the spec]]
( ([TIME[2013-07-13 11:50:26 +09:00]] 版))
<http://lists.whatwg.org/pipermail/whatwg-whatwg.org/2013-July/040059.html>
[11] [CITE[''''''[''''''whatwg'''''']'''''' Avoiding synchronous iframe load]]
( ([TIME[2013-10-26 04:58:58 +09:00]] 版))
<http://lists.whatwg.org/pipermail/whatwg-whatwg.org/2013-October/041281.html>
[4] [CITE[''''''[''''''whatwg'''''']'''''' Navigation and history traversal issues]]
( ([TIME[2012-09-19 01:33:19 +09:00]] 版))
<http://lists.whatwg.org/pipermail/whatwg-whatwg.org/2012-September/037325.html>
[5] [CITE@en-US[Window Object 1.0]]
( ([TIME[2006-04-08 02:19:28 +09:00]] 版))
<http://www.w3.org/TR/Window/#dfn-navigate>
[6] [CITE@en[Web Applications 1.0 r8555 Be more explicit about handing off to external software during navigation.]]
( ([TIME[2014-03-20 07:01:00 +09:00]] 版))
<http://html5.org/tools/web-apps-tracker?from=8554&to=8555>
[7] [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>