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