[6] [[ハイパーリンク]]は、[RUBYB[たどる]@en[follow]]ことによって[[リンク先]]に
[[navigate]] させたり、[[ダウンロード]]することによって[[リンク先]]を保存したりできます。

* 仕様書

[REFS[
- [72] [CITE@en-GB-x-hixie[HTML Standard]] ([TIME[2016-04-09 09:15:24 +09:00]] 版) <https://html.spec.whatwg.org/#the-link-element>
- [92] [CITE@en-GB-x-hixie[HTML Standard]] ([TIME[2016-04-09 09:15:24 +09:00]] 版) <https://html.spec.whatwg.org/#the-a-element>
- [80] [CITE@en-GB-x-hixie[HTML Standard]] ([TIME[2016-04-09 09:15:24 +09:00]] 版) <https://html.spec.whatwg.org/#links-created-by-a-and-area-elements>
- [5] '''[CITE@en-GB-x-hixie[HTML Standard]] ([TIME[2016-03-24 02:22:02 +09:00]] 版) <https://html.spec.whatwg.org/#following-hyperlinks-2>'''
- [34] [CITE@en-GB-x-hixie[HTML Standard]] ([TIME[2016-03-24 02:22:02 +09:00]] 版) <https://html.spec.whatwg.org/#hyperlink-auditing>
- [40] [CITE@en-GB-x-hixie[HTML Standard]] ([TIME[2016-04-09 09:15:24 +09:00]] 版) <https://html.spec.whatwg.org/#downloading-hyperlinks>
- [143] [CITE@en-GB-x-hixie[HTML Standard]] ([TIME[2016-05-24 17:09:37 +09:00]]) <https://html.spec.whatwg.org/#link-type-noreferrer>
- [98] [CITE@en-GB-x-hixie[HTML Standard]] ([TIME[2016-04-09 09:15:24 +09:00]] 版) <https://html.spec.whatwg.org/#the-area-element>
]REFS]

* リンク元の表示

[75] [CODE(HTMLe)@en[a]] [[要素]]は通常の [[CSS]] の規則に従い、
[CODE(HTMLe)@en[area]] [[要素]]は[[画像写像]]の処理規則に従い、
[[文書]]の一部として[[表示]]されます。

[76] [CODE(HTMLe)@en[link]] [[要素]]は標準状態では[[表示]]されませんが、
通常の [[CSS]] の規則に従い、[[著者]]の指定によって[[表示]]させることができます。

** 利用者による指示

[77] [[利用者エージェント]]は、[[活性化動作]] (>>32)
としてこれらの[[リンク元]]から[[ハイパーリンクをたどる]]、
あるいは[[ハイパーリンクのダウンロード]]を実行する手段を[[利用者]]に提供することになっています。

[73] 加えて、[[利用者エージェント]]は、 [CODE(HTMLe)@en[link]] [[要素]]で作成された[[ハイパーリンク]]について、
[[利用者]]が[[ハイパーリンクをたどる]]ことを指示する方法を提供できます [SRC[>>72]]。

;; 具体的な表示方法や指示方法は規定されていません。また提供の義務はありません。
[CODE(HTMLe)@en[link]] も参照。

;; [74] [[ハイパーリンクのダウンロード]]の手段の提供の可否には
[[HTML Standard]] は言及していませんが、意図的なのかどうかは不明です。

[79] [[クリック]]等による[[活性化動作]]の他に、
[[文脈メニュー]]からの動作の選択や、
他の[[閲覧文脈]]への[[リンク]]の[[ドラッグ]]、
[[ダウンロードマネージャー]]や他の[[アプリケーション]]への[[リンク]]の[[ドラッグ]]などでも[[ハイパーリンクをたどる]]処理や[[ハイパーリンクのダウンロード]]の処理を起動する必要がありそうですが、
それに関する明文規定は今のところなさそうです。
(流石にこれらがすべて[[クリック]]の特殊形で[[活性化動作]]としてカバーされるとみなすのは無理がありそうです。
しかしいずれも[[活性化動作]]と同じ挙動でうまく処理できそうです。)

[114] いずれにせよ、[[利用者エージェント]]は、[[リンク]]に関する一連の処理に対して、
次のような情報を保持した[[オブジェクト]][VAR[イベント]]を (内部的に)
用意して引き渡すことになります。
[FIG(list)[
- [116] 実際の[[指示装置]]による活性化の指示かどうかのフラグ
- [117] [[指示装置]]によって指示されている[[座標]] (あれば。)
- [120] [[修飾キー]]の押下状態 (あれば。)
- [118] [[メニュー]]などから[[利用者]]が明示的選択した動作 (あれば。新しい[[閲覧文脈]]を開く、
[[ダウンロード]]する、など。)
- [119] [[DnD]] などで[[利用者]]が明示的に指定した [[navigate]] に使う[[閲覧文脈]]
(あれば。)
- [130] [[DnD]] などで[[利用者]]が明示的に指定した[[ダウンロード]]後の保存先の[[ディレクトリー]]や[[ファイル名]]や[[ヘルパーアプリケーション]]
]FIG]

[140] [[利用者エージェント]]から[[利用者]]に提示する選択肢には、普通何らかの制限があります。

[EG[
[141] 例えば多くの[[デスクトッププラットフォーム]]の[[視覚的利用者エージェント]]は[[ハイパーリンク]]の
[[DnD]] で[[ハイパーリンクをたどる]]ために使う[[閲覧文脈]]を選択できますが、
[[入れ子閲覧文脈]]や[[補助閲覧文脈]]への [[DnD]] は禁止するのが好ましそうです。
]EG]

[EG[
[142] [CODE(URI)@en[javascript:]] [[URL]] の[[ハイパーリンク]]を[[著者]]の指定以外の[[閲覧文脈]]で処理するのは好ましくなさそうです。

;; [145] [[Chrome]] は [[DnD]] を制限していないようですが... [TIME[2016-10-10T02:36:54.000Z]]
]EG]

[SEE[ [[閲覧文脈の選択]], [[閲覧文脈の作成]] ]]

** 利用者への事前情報の提示

[27] 普通、[[Webブラウザー]]は、実際に[[利用者]]が[[ハイパーリンクをたどる]]前に、
([CODE(CSS)@en[:hover]] や [CODE(CSS)@en[:focus]] となった時点で)
[[リンク先]]の [[URL]] (>>47) を[[利用者]]へのヒントとして提示します。

[28] かつては[[ステータスバー]]に示すのが一般的でしたが、
[[ステータスバー]]が使われなくなってからは、
一時的に[[ステータスバー]]の位置に表示する形態が普通となりました。

[31] [[tooltip]] として表示する実装もありました。

[29] [[利用者エージェント]]によっては、 [[URL]] 全体ではなく、
一部を省略して表示することがあります。

[30] [[Firefox]] は[[ハイパーリンク接尾辞]]も含めて表示しますが、
[[Chrome]] は含めずに表示します。 [TIME[2016-03-26T04:18:24.300Z]]

[37] [CODE(HTMLa)@en[ping]] [[属性]]がある場合はその旨も併記する[SHOULD[べき]]
[SRC[>>34]] とされていますが、現行の[[利用者エージェント]]でそのように実装しているものはなさそうです。

;; [CODE(HTMLa)@en[ping]] も参照。

* リンク先URL

[47] [[要素]][VAR[要素]]と[[イベント]][VAR[イベント]]のリンク先のURLは、
次のように決定したものです [SRC[>>5, >>40]]。
[FIG(steps)[
= [48] [VAR[href]] を、[VAR[要素]]の [CODE(HTMLa)@en[href]] [[属性値]]に設定します。
= [15] [VAR[URL]] を、[VAR[要素]]の[F[節点文書]]に[[相対]]に [VAR[href]]
に [[URLの構文解析]]を適用した結果に設定します。
= [46] [VAR[URL]] が[[失敗]]でなければ、
== [23] [VAR[URL]] の末尾に、[VAR[要素]]と[VAR[イベント]]に関するハイパーリンク接尾辞 (>>52) 
を追加します。
= [50] [VAR[URL]] を返します。
]FIG]

[51] つまり、 [CODE(HTMLa)@en[href]] [[属性]]の値を[[文書基底URL]]
に対して[[解決][URLの解決]]した結果がリンク先の [[URL]] となります。

[52] ただし [CODE(HTMLa)@en[ismap]] ([[サーバー側画像写像]]) を使っている時は、
その末尾に[[座標]]を付加した値となります。これが「ハイパーリンク接尾辞」です。
[VAR[要素]]の「ハイパーリンク接尾辞」は、
イベント[VAR[イベント]]について、次のように決定したものです。
[FIG(steps)[
= [100] 
[FIG(list)[
- [101] [VAR[要素]]が [CODE(HTMLe)@en[a]] [[要素]]
- [102] [VAR[イベント]]の[F[対象]]が [CODE(HTMLe)@en[img]] [[要素]]
- [103] [VAR[イベント]]の[F[対象]]に [CODE(HTMLa)@en[ismap]] [[属性]]がある
]FIG]
... のすべてを満たすなら、 [SRC[>>92]]
== [49] [VAR[イベント]]が実際に[[指示装置]]から発せられたものなら、
=== [105] [VAR[x]] を、[VAR[イベント]]の[F[対象]]の[[左辺]]から指示位置までの[[CSS画素]]単位の[[距離]]に設定します。
=== [110] [VAR[x]] が[[負]]なら、[VAR[x]] を、 0 に設定します。
=== [106] [VAR[y]] を、[VAR[イベント]]の[F[対象]]の[[上辺]]から指示位置までの[[CSS画素]]単位の[[距離]]に設定します。
=== [111] [VAR[y]] が[[負]]なら、[VAR[y]] を、 0 に設定します。
== [107] それ以外なら、
=== [108] [VAR[x]] を、 0 に設定します。
=== [109] [VAR[y]] を、 0 に設定します。
== [112] [CODE[?]]、[VAR[x]]、[CODE[,]]、[VAR[y]] を連結した結果を返します。
[VAR[x]] と [VAR[y]] は、それぞれ[[ASCII数字]]で[[十進数]]で表したものとします。
= [104] それ以外の場合、[[空文字列]]を返します。
]FIG]

[99] ここで、[VAR[イベント]]は、[[活性化動作]]によって[[ハイパーリンクをたどる]]場合には、
その [CODE(DOMe)@en[click]] [[イベント]]です [SRC[>>92]]。
[[利用者インターフェイス]]への表示の場合は、 [CODE(DOMe)@en[mousemove]]
など適当な[[イベント]]です。

[113] [[画像]]の実際のサイズではなく、表示上のサイズから[[座標]]が決まります。

;; [115] 座標の値は、最短の[[十進数]]表記とするべきと思われますが、なぜか明記されていません。

[24] [VAR[URL]] に[[素片識別子]]が含まれる場合、[[ハイパーリンク接尾辞]]はその後に追加されるので、
[[サーバー]]には送信されないことになります。おかしな動作ですが、
[[HTML Standard]]、[[Chrome]]、[[Firefox]] とも共通しています。

* 活性化動作

[32] [CODE(HTMLe)@en[a]], [CODE(HTMLe)@en[area]], [CODE(HTMLe)@en[link]]
各[[要素]]の[[活性化動作]]として、[[ハイパーリンク]]の処理が規定されています。

;; [33] [[SVG]] の [CODE(XMLe)@en[a]] [[要素]]や、かつて実装されていた頃の [[XLink]]
[[単純リンク]]もほぼ同様に処理されるべきものと思われますが、明文規定はありません。

[84] [[要素]][VAR[要素]]の[[活性化動作]]は、
[VAR[イベント]]について、
次のようにしなければ[MUST[なりません]]。
[FIG(steps)[

= [148] [VAR[要素]]が[[navigateできない]]場合、
== [149] ここで停止します。
= [93] [VAR[動作]]を、[VAR[要素]]と[VAR[イベント]]から判断した動作 (>>38) に設定します。
= [94] [VAR[動作]]が「たどる」なら、
== [91] [VAR[要素]]について[[ハイパーリンクをたどる]]処理を実行します
[SRC[>>72, >>92, >>98]]。
[VAR[イベント]]を引き渡します。
= [95] [VAR[動作]]が「ダウンロード」なら、
== [96] [VAR[要素]]について[[ハイパーリンクをダウンロード]]します [SRC[>>92, >>98]]。 
[VAR[イベント]]を引き渡します。
]FIG]

[150] [VAR[要素]]が[DFN[[RUBYB[navigateできない]@en[cannot navigate]]]]とは、
つぎの''いずれか''が[[真]]であることをいいます [SRC[[CITE[HTML Standard]]]]。

- [151] [VAR[要素]]の[F[節点文書]]が[[完全に活性]]では''ない''
- [152] [VAR[要素]]が [CODE[a]] では''なく''、[[文書に接続]]されて''いない''

;; [89] [[後方互換性]]のため、 [CODE[a]] [[要素]]のみ特例が設けられています。

;; [90] [[ハイパーリンクをたどる]]操作の他に、[[フォームの提出]]からも参照されます。


[38] [VAR[要素]]と[VAR[イベント]]から[[ハイパーリンク]]を
「たどる」か「ダウンロード」かを、次のようにして決定します。
[FIG(steps)[
= [83] [VAR[要素]]が [CODE(HTMLe)@en[link]] [[要素]]なら、「たどる」を返し、ここで停止します [SRC[>>72]]。
= [81] [VAR[イベント]]で[[利用者]]がどちらかを示している時は、それを返し、ここで停止します [SRC[>>80]]。
= [85] [VAR[要素]]に [CODE(HTMLa)@en[download]] [[属性]]があれば、
== [86] 「ダウンロード」を返す[SHOULD[べきです]] [SRC[>>80]]。
= [87] 「たどる」を返す[SHOULD[べきです]] [SRC[>>80]]。
]FIG]

[88] [[利用者]]の指示は、[[文脈メニュー]]から「開く」と「ダウンロード」
のいずれかを選ぶ形で行われるかもしれませんし、
操作時点の [KBD[Ctrl]] や [KBD[Shift]] などの押下状態によって決められるかもしれません。
どのように指示させるか (そもそも指示の手段を提供するか) は、
[[利用者エージェント]]に委ねられています。
[MUST[MUST]] でなく [SHOULD[SHOULD]] となっているのも、
[[利用者エージェント]]の個別の事情に関する事項だからと思われます。

;; [82] [CODE(HTMLe)@en[link]] [[要素]]については、なぜか「たどる」
しか選択肢が用意されていません。

;; [39] 「たどる」が選ばれたとしても、 [[navigate]] 
が最終的に[[ダウンロード]]となることもあります。 [[navigate]] 参照。

;; [126] [[HTML Standard]] は[[活性化動作]]での[[ポップアップ]]検査 (>>59, >>122) 
と実際の動作 (>>93) とで「たどる」と「ダウンロード」との分岐条件がなぜか微妙に違っているのですが、
どちらも同条件で分岐するべきと思われます。
更にエラーとする条件が[VAR[要素]]に [CODE(HTMLa)@en[target]]
[[属性]]があるかどうかとされていますが、それ以外 ([CODE(HTML)@en[<base target>]] がある場合)
も同じようにエラーとするべきように思われます。

[131] [VAR[要素]]の提案ファイル名は、次のようにして決定した値です [SRC[>>40]]。
[FIG(steps)[
= [132] [VAR[要素]]が [CODE(HTMLe)@en[link]] [[要素]]なら、 
== [133] [[null]] を返します。
= [134] それ以外なら、
== [135] [VAR[ファイル名]]を、 [VAR[要素]]の [CODE(HTMLa)@en[download]] 
[[属性値]]に設定します。
== [136] [VAR[ファイル名]]が[[空文字列]]なら、
=== [137] [[null]] を返します。
== [138] それ以外なら、
=== [139] [VAR[ファイル名]]を返します。
]FIG]

[HISTORY[


[163] 
[CITE[超漢字]]の標準の[[Webブラウザー]][CITE[[[BBB]]]]は、
[[ハイパーリンク]]を[[クリック]]で辿る動作 (既定値)
の他に、
[[ダブルクリック]]で辿るオプションを提供していました。
これは「仮身をウィンドウに開く動作」に合わせたものでした。
[SRC[>>162]]

;; [164] [CITE[超漢字]]等[[BTRON]]の[[文書形式]]である 
[[TAD]] は一種の[[ハイパーテキスト]]で、
[[仮身]]はそれに於いて[[ハイパーリンク]]に近い概念でした。

;; [165] 逆パターンですが、 [CITE[[[IE4]]]] の統合以後の [[Windows]] 
[CITE[[[エクスプローラ]]]]
が[[アイコン]]を[[ダブルクリック]]で開くかわりに[[クリック]]で開くオプションを提供したのと似ています。

[REFS[
- [162] 
[CITE@ja[ユーザ設定をする - [[超漢字]]ウェブサイト]], [TIME[2010-11-10T00:22:27.000Z]], [TIME[2022-09-03T07:37:26.229Z]] <http://www.chokanji.com/ckv/manual/05-01-03.html>
]REFS]

]HISTORY]

* ハイパーリンクをたどる

[7] [VAR[要素]]と[VAR[イベント]]について[DFN[[RUBYB[[[ハイパーリンクをたどる]]]@en[follow a hyperlink]]]]
[SRC[>>5]] 操作は、[[ハイパーリンク]]で指定された [[URL]] へと [[navigate]] 
するものです。多くの[[ハイパーリンク]]の標準の操作は、
この「[[ハイパーリンク]]をたどる」操作となっています。

[41] 次のようにしなければ[MUST[なりません]] [SRC[>>5]]。
[FIG(steps)[
= [9] [VAR[始点]]を、[VAR[要素]]の[F[節点文書]]の[F[閲覧文脈]]に設定します。
= [14] [VAR[noopener]] を、
[VAR[要素]]の[F[リンク型群][リンク型]]に 
[CODE(HTML)@en[noreferrer]] または [CODE(HTML)@en[noopener]] が含まれているか否かに設定します。
= [10] [VAR[対象]]、[VAR[[[置換有効]]]]、[VAR[[[利用者]]が[[閲覧文脈]]を明示した]]を、
[[閲覧文脈の選択]]の結果に設定します。
[FIG(list members)[
: [VAR[要素]] : [VAR[要素]]
: [VAR[利用者指示]] : [VAR[イベント]]
: [VAR[noopener]] : [VAR[noopener]]
]FIG]
= [59] [VAR[対象]]が何も選ばれなかった場合、
== [61] [[入口設定群オブジェクト]]があれば、
=== [97] [CODE(DOMe)@en[InvalidAccessError]] [[例外]]を[[投げ]]ます。 [SRC[>>92, >>98]]
== [121] ここで停止します。 [SRC[>>92, >>98]]
= [11] [VAR[置換有効]]が[[真]]で、 [VAR[noopener]] が[[真]]の場合、
== [13] [VAR[対象]]の[F[opener閲覧文脈]]を [[disown][disown its owner]] します。
= [53] [VAR[URL]] を、[VAR[要素]]と[VAR[イベント]]におけるリンク先のURL
(>>47) に設定します。
= [16] [VAR[URL]] が[[失敗]]なら、
== [42] 失敗を報告します (>>18)。
= [17] それ以外なら、
== [25] [[タスク]]を[[タスクキューに追加]]します。
[FIG(list members)[
[FIGCAPTION[
[[タスク]]
]FIGCAPTION]
: [VAR[処理]] :
[FIG(steps)[
= [26] [[navigate]] します。
[FIG(list members)[
: [VAR[新しい[[資源]]]] : 
[FIG(list members)[
: [F[要求]] :
[FIG(list members)[ [157] [[要求]]

: [F[URL][要求URL]] : [VAR[URL]]
: [F[参照元]] : [VAR[要素]]の[F[リンク型群]]に [CODE[noreferrer]]
が含まれれば [CODE[no-referrer]]。それ以外なら [CODE[client]]。
: [F[参照元ポリシー]] : [VAR[要素]]の [CODE(HTMLa)@en[referrerpolicy]] [[属性]]の状態

]FIG]
]FIG]
: [VAR[[[navigate]] する[[閲覧文脈]]]] : [VAR[対象]]
: [VAR[[[始点閲覧文脈]]]] : [VAR[始点]]
: [VAR[[[置換有効]]]] : [VAR[置換有効]]
: [VAR[新しい[[最上位閲覧文脈]]]] : [VAR[置換有効]]
: [VAR[提案ファイル名]] : [VAR[要素]]の提案ファイル名 (>>131)
: [VAR[[[利用者]]が[[閲覧文脈]]を明示した]] : [VAR[[[利用者]]が[[閲覧文脈]]を明示した]]

]FIG]
]FIG]
: [VAR[タスク源]] : [[DOM操作タスク源]]
]FIG]
== [54] [VAR[要素]]と[VAR[URL]]について [CODE(HTMLa)@en[ping]] [[属性]]の処理 (>>55) を実行します。
]FIG]

* ハイパーリンクをダウンロード

[60] [VAR[要素]]と[VAR[イベント]]の[DFN[[RUBYB[ハイパーリンクをダウンロード]@en[download a hyperlink]]]]
[SRC[>>40]] する操作は、[[ハイパーリンク]]で指定された [[URL]] について[[ダウンロード]]を実行するものです。

[62] 次のようにしなければ[MUST[なりません]] [SRC[>>40]]。
[FIG(steps)[
= [63] [VAR[URL]] を、[VAR[要素]]と[VAR[イベント]]におけるリンク先のURL
(>>47) に設定します。
= [64] [VAR[URL]] が[[失敗]]なら、
== [65] 失敗を報告します (>>18)。
= [66] それ以外なら、
== [68] [[並列に]]、
=== [69] [[要求]]を [[fetch]] します。[VAR[続きの処理]]は、[[ダウンロード]]とします。
[FIG(list members)[
[FIGCAPTION[
[[要求]]
]FIGCAPTION]
: [F[URL][要求のURL]] : [VAR[URL]]
: [F[クライアント][要求のクライアント]] : [[入口設定群オブジェクト]]
: [F[initiator]] : [CODE[download]]
: [F[終点]] : [[空文字列]]
: [F[[[[CODE(HTTP)@en[Origin]]ヘッダー省略フラグ]]]] : [[真]]
: [F[同期フラグ]] : [[真]]
: [F[URL credentials利用フラグ]] : [[真]]
: [F[参照元]] : 
[VAR[要素]]の[F[リンク型群]]に [CODE[noreferrer]] が含まれれば [CODE[no-referrer]]。
それ以外なら [CODE[client]]。 [SRC[仕様書に明記なし]]
: [F[参照元ポリシー]] :
[VAR[要素]]の [CODE(HTMLa)@en[referrerpolicy]] [[属性]]の状態 [SRC[仕様書に明記なし]]
]FIG]
[VAR[イベント]]を引き渡します。
[VAR[提案ファイル名]]は、[VAR[要素]]の提案ファイル名 (>>131) とします。
=== [67] [VAR[要素]]と[VAR[URL]]について [CODE(HTMLa)@en[ping]] [[属性]]の処理 (>>55) を実行します。
]FIG]

;; [78] [CODE(URI)@en[javascript:]] へのリンクなど、[[navigate]] ではうまく処理されても、
[[ダウンロード]]では処理できない場合もあります。

[128] [[ダウンロード]]の処理で使う[[起源]]は、
[VAR[要素]]の[F[節点文書]]の[F[起源][文書の起源]]と思われます。

[129] [[ダウンロード]]の処理は、[VAR[イベント]]の情報の一部も参照することがあります。

* 失敗の報告

[18] [[ハイパーリンクをたどる]]、または[[ハイパーリンクをダウンロード]]する時に
[[URLの解決]]で失敗したら、[[利用者エージェント]]は次のいずれかの動作を選べます 
[SRC[>>5, >>40]]。
[FIG(list)[
- [19] [[利用者エージェント]]依存の方法で[[利用者]]に[[誤り]]を報告します。
- [22] [[タスク]]を[[タスクキューに追加]]します。
[FIG(list members)[
[FIGCAPTION[
[[タスク]]
]FIGCAPTION]
: [VAR[処理]] :
[FIG(steps)[
= [20] [[navigate]] します。
[FIG(list members)[
: [VAR[新しい[[資源]]]] : エラーを説明したページ
: [VAR[[[navigate]] する[[閲覧文脈]]]] : [VAR[対象]]
]FIG]
]FIG]
: [VAR[タスク源]] : [[DOM操作タスク源]]
]FIG]
- [21] 何もしません。
]FIG]

;; [43] [[HTML Standard]] は、エラーページへの [[navigate]] (>>22) について、
[[ハイパーリンクをたどる]]際には新しい[[タスク]]、[[ハイパーリンクをダウンロード]]する際には同じ[[タスク]]で実行しています。
この違いが意図的なものなのかどうかは不明です。

;; [45] [VAR[対象]]は、[[ハイパーリンクをたどる]]場合には、その過程で選択した[[閲覧文脈]]です。
[[ハイパーリンクのダウンロード]]の場合は、 ([[HTML Standard]] にはなぜか明記されていませんが)
[[リンク]]が含まれる[[閲覧文脈]]とするのが適当そうです。

[44] [[利用者]]の便宜や [[navigate]] の途中でのエラーとの動作の整合性を考慮すると、
[[ハイパーリンクをたどる]]場合にはエラーページに [[navigate]] して、
[[ハイパーリンクのダウンロード]]の場合には非[[モーダル]]な[[ダイアログ]]などでエラーを通知するのが良さそうに思えます。

[127] まったく何もしないのは、[[利用者]]を混乱させそうです。

* [CODE(HTMLa)@en[ping]] 属性の処理

;; [56] [CODE(HTMLa)@en[ping]] も参照。

[55] [CODE(HTMLa)@en[ping]] [[属性]]の処理とは、次のようにすることをいいます。
[FIG(steps)[
= [35] [VAR[要素]]が [CODE(HTMLe)@en[a]] [[要素]]または [CODE(HTMLe)@en[area]]
[[要素]]で、 [CODE(HTMLa)@en[ping]] [[属性]]を持つなら、
== [36] [CODE(HTMLa)@en[ping]] [[属性]]の処理を実行します。 [SRC[>>34]]
]FIG]

;; [58] [CODE(HTMLe)@en[link]] [[要素]]には、 [CODE(HTMLa)@en[ping]]
[[属性]]はありません。

;; [57] [[HTML Standard]] は[[ハイパーリンクをたどる]]処理の時にこれを行うことを求めていますが、
[[ハイパーリンクのダウンロード]]にはなぜか言及されていません。
[[Chrome]] は、[[ハイパーリンクのダウンロード]]でも [CODE(HTMLa)@en[ping]]
の処理を行っているようです。 [TIME[2016-04-12T12:16:22.900Z]]

* 歴史

[1] [CITE@en[Integrate Fetch into HTML · whatwg/html@7c5555a]]
([TIME[2015-09-18 18:47:59 +09:00]] 版)
<https://github.com/whatwg/html/commit/7c5555a16f2920c02244c10756bb2f1a11e87a22>

[2] [CITE@en[Clarify the following/downloading hyperlink algorithms · whatwg/html@47e4aa0]]
([TIME[2015-11-05 17:14:33 +09:00]] 版)
<https://github.com/whatwg/html/commit/47e4aa05825df966848ca2c7773794576a130b88>

[3] [CITE@en[Add a 'noopener' <link rel> keyword and window feature · whatwg/html@2992ea9]] ([TIME[2015-11-12 22:04:20 +09:00]] 版) <https://github.com/whatwg/html/commit/2992ea921bc75e44157451a37a807a8ce0b9a884>

[4] [CITE@en[Editorial: clarify follow a hyperlink algorithm · whatwg/html@d22a9f1]]
([TIME[2016-03-26 12:44:39 +09:00]] 版)
<https://github.com/whatwg/html/commit/d22a9f12e1cc13a77504fa6482b7ded6ba790b54>

[70] [[Chrome]] では、[[ハイパーリンクをたどる]]場合、
[CODE[ping]] → [[ハイパーリンクをたどる]]実行後に発生した [[fetch]]
→ [CODE[href]] の順で [[fetch]] が行われます。
[[ハイパーリンクのダウンロード]]の場合、
[CODE[href]] → [CODE[ping]] → [[ハイパーリンクのダウンロード]]実行後に発生した
[[fetch]] の順で [[fetch]] が行われます。
[TIME[2016-04-12T12:37:05.300Z]]

;; [71] [[HTML Standard]] では [CODE[ping]] をどの時点で [[fetch]]
するべきなのか明確になっていません。

[144] [CITE@en[Integrate referrerpolicy for a, area, iframe, and link elements]]
([[estark37]]著, [TIME[2016-08-12 06:42:26 +09:00]])
<https://github.com/whatwg/html/commit/2e955e66ae7f815efe09ccac6445cfbdcbf643ab>

[146] [CITE@en[Allow <a>/<area> with download="" to not require user activation]]
([[domenic]]著, [TIME[2016-12-06 07:13:46 +09:00]])
<https://github.com/whatwg/html/commit/5de03c7b38e7b33a49f0dcf2bcef29e8eb9a2205>

[122] [CITE@en[Revert part of "Allow <a>/<area> with download="" to not require user…]]
([[zcorpan]]著, [TIME[2016-12-07 17:47:38 +09:00]])
<https://github.com/whatwg/html/commit/b359209579d79a713af88ecf24b9be8fb6168adf>

[8] [CITE@en[Revamp the rules for choosing a browsing context]]
([[annevk]]著, [TIME[2017-05-09 16:31:28 +09:00]])
<https://github.com/whatwg/html/commit/5578a0495f826a56597288b7ba1f71163f17cdd6>

[12] [CITE@en[Make noopener stop the copying of session storage]]
([[mystor]]著, [TIME[2017-09-06 06:56:03 +09:00]])
<https://github.com/whatwg/html/commit/a68a1f712b641981d7367d78758596b21a04521c>

[123] [CITE@en[Editorial: centralize target attribute processing]]
([[annevk]]著, [TIME[2017-09-06 16:17:43 +09:00]])
<https://github.com/whatwg/html/commit/0b31844d6dcc7ef49b3815f4f709d4c0284378f1>

[124] [CITE@en[Deduplicate finding the correct target attribute · Issue #2619 · whatwg/html]]
([TIME[2017-09-10 21:29:18 +09:00]])
<https://github.com/whatwg/html/issues/2619>

[125] [CITE@en[Editorial: centralize target attribute processing by annevk · Pull Request #3007 · whatwg/html]]
([TIME[2017-09-10 21:29:49 +09:00]])
<https://github.com/whatwg/html/pull/3007>

[147] [CITE@en[Centralize checks for <a>, <area>, <form>, and <link>]]
([[annevk]]著, [TIME[2017-09-22 21:04:25 +09:00]])
<https://github.com/whatwg/html/commit/f3c354add894e1ac01e3732ff976aa9874a77b3f>

[153] [CITE@en[<a>, <area>, <link>, and <form> behavior · Issue #2615 · whatwg/html]]
([TIME[2017-09-29 16:36:00 +09:00]])
<https://github.com/whatwg/html/issues/2615>

[154] [CITE@en[Centralize checks for <a>, <area>, <form>, and <link> by annevk · Pull Request #2613 · whatwg/html]]
([TIME[2017-09-29 16:41:20 +09:00]])
<https://github.com/whatwg/html/pull/2613>

[155] [CITE@en[Editorial: "return, but continue" cleanup for downloads and Worker]]
([[annevk]]著, [TIME[2018-01-24 22:04:54 +09:00]])
<https://github.com/whatwg/html/commit/0217e1d4cb1ace836f6ef72a402b643aa879fbed>

[156] [CITE@en[Editorial: "return, but continue" cleanup for downloads and Worker by annevk · Pull Request #3397 · whatwg/html]]
([TIME[2018-01-27 16:50:01 +09:00]])
<https://github.com/whatwg/html/pull/3397>

[158] [CITE@en[Editorial: inline noreferrer processing model]]
([[annevk]]著, [TIME[2019-02-12 21:54:42 +09:00]])
<https://github.com/whatwg/html/commit/f47773d25a7b1a3a03c1047bbc4037d08639cf9b>

[159] [CITE@en[Support "noreferrer" for window.open() by annevk · Pull Request #4331 · whatwg/html]]
([TIME[2020-09-19 19:12:07 +09:00]])
<https://github.com/whatwg/html/pull/4331>

[160] [CITE@en[Make "triggered by user activation" match browser behavior · Issue #1903 · whatwg/html]]
([TIME[2022-01-25T07:58:35.000Z]])
<https://github.com/whatwg/html/issues/1903>

[161] 
[[Chrome]]
は機嫌が悪いと(?) [CODE[<a download>]] を普通に[[クリック]]してるだけなのにダウンロードがブロックされました、
ってなっちゃうことあるんだよなあ、どうなってんだか。
[TIME[2022-01-26T13:59:27.900Z]]

