[6] ハイパーリンクは、たどることによってリンク先に navigate させたり、ダウンロードすることによってリンク先を保存したりできます。
[75] a
要素は通常の CSS の規則に従い、
area
要素は画像写像の処理規則に従い、
文書の一部として表示されます。
[76] link
要素は標準状態では表示されませんが、
通常の CSS の規則に従い、著者の指定によって表示させることができます。
[77] 利用者エージェントは、活性化動作 (>>32) としてこれらのリンク元からハイパーリンクをたどる、 あるいはハイパーリンクのダウンロードを実行する手段を利用者に提供することになっています。
[73] 加えて、利用者エージェントは、 link
要素で作成されたハイパーリンクについて、
利用者がハイパーリンクをたどることを指示する方法を提供できます >>72。
[79] クリック等による活性化動作の他に、 文脈メニューからの動作の選択や、 他の閲覧文脈へのリンクのドラッグ、 ダウンロードマネージャーや他のアプリケーションへのリンクのドラッグなどでもハイパーリンクをたどる処理やハイパーリンクのダウンロードの処理を起動する必要がありそうですが、 それに関する明文規定は今のところなさそうです。 (流石にこれらがすべてクリックの特殊形で活性化動作としてカバーされるとみなすのは無理がありそうです。 しかしいずれも活性化動作と同じ挙動でうまく処理できそうです。)
[114] いずれにせよ、利用者エージェントは、リンクに関する一連の処理に対して、 次のような情報を保持したオブジェクトイベントを (内部的に) 用意して引き渡すことになります。
[140] 利用者エージェントから利用者に提示する選択肢には、普通何らかの制限があります。
[141] 例えば多くのデスクトッププラットフォームの視覚的利用者エージェントはハイパーリンクの DnD でハイパーリンクをたどるために使う閲覧文脈を選択できますが、 入れ子閲覧文脈や補助閲覧文脈への DnD は禁止するのが好ましそうです。
[27] 普通、Webブラウザーは、実際に利用者がハイパーリンクをたどる前に、
(:hover
や :focus
となった時点で)
リンク先の URL (>>47) を利用者へのヒントとして提示します。
[28] かつてはステータスバーに示すのが一般的でしたが、 ステータスバーが使われなくなってからは、 一時的にステータスバーの位置に表示する形態が普通となりました。
[29] 利用者エージェントによっては、 URL 全体ではなく、 一部を省略して表示することがあります。
[30] Firefox はハイパーリンク接尾辞も含めて表示しますが、 Chrome は含めずに表示します。
[37] ping
属性がある場合はその旨も併記するべき
>>34 とされていますが、現行の利用者エージェントでそのように実装しているものはなさそうです。
ping
も参照。[47] 要素要素とイベントイベントのリンク先のURLは、 次のように決定したものです >>5, >>40。
[51] つまり、 href
属性の値を文書基底URL
に対して解決した結果がリンク先の URL となります。
[52] ただし ismap
(サーバー側画像写像) を使っている時は、
その末尾に座標を付加した値となります。これが「ハイパーリンク接尾辞」です。
要素の「ハイパーリンク接尾辞」は、
イベントイベントについて、次のように決定したものです。
[99] ここで、イベントは、活性化動作によってハイパーリンクをたどる場合には、
その click
イベントです >>92。
利用者インターフェイスへの表示の場合は、 mousemove
など適当なイベントです。
[113] 画像の実際のサイズではなく、表示上のサイズから座標が決まります。
[24] URL に素片識別子が含まれる場合、ハイパーリンク接尾辞はその後に追加されるので、 サーバーには送信されないことになります。おかしな動作ですが、 HTML Standard、Chrome、Firefox とも共通しています。
[32] a
, area
, link
各要素の活性化動作として、ハイパーリンクの処理が規定されています。
[84] 要素要素の活性化動作は、
イベントについて、
次のようにしなければなりません。
[150] 要素がnavigateできないとは、 つぎのいずれかが真であることをいいます HTML Standard。
[38] 要素とイベントからハイパーリンクを
「たどる」か「ダウンロード」かを、次のようにして決定します。
[88] 利用者の指示は、文脈メニューから「開く」と「ダウンロード」 のいずれかを選ぶ形で行われるかもしれませんし、 操作時点の Ctrl や Shift などの押下状態によって決められるかもしれません。 どのように指示させるか (そもそも指示の手段を提供するか) は、 利用者エージェントに委ねられています。 MUST でなく SHOULD となっているのも、 利用者エージェントの個別の事情に関する事項だからと思われます。
target
属性があるかどうかとされていますが、それ以外 (<base target>
がある場合)
も同じようにエラーとするべきように思われます。[7] 要素とイベントについてハイパーリンクをたどる >>5 操作は、ハイパーリンクで指定された URL へと navigate するものです。多くのハイパーリンクの標準の操作は、 この「ハイパーリンクをたどる」操作となっています。
[41] 次のようにしなければなりません >>5。noreferrer
または noopener
が含まれているか否かに設定します。
[60] 要素とイベントのハイパーリンクをダウンロード >>40 する操作は、ハイパーリンクで指定された URL についてダウンロードを実行するものです。
[62] 次のようにしなければなりません >>40。download
Origin
ヘッダー省略フラグnoreferrer
が含まれれば no-referrer
。
それ以外なら client
。 仕様書に明記なしreferrerpolicy
属性の状態 仕様書に明記なしping
属性の処理 (>>55) を実行します。
[18] ハイパーリンクをたどる、またはハイパーリンクをダウンロードする時に
URLの解決で失敗したら、利用者エージェントは次のいずれかの動作を選べます
>>5, >>40。
[44] 利用者の便宜や navigate の途中でのエラーとの動作の整合性を考慮すると、 ハイパーリンクをたどる場合にはエラーページに navigate して、 ハイパーリンクのダウンロードの場合には非モーダルなダイアログなどでエラーを通知するのが良さそうに思えます。
ping
属性の処理[55] ping
属性の処理とは、次のようにすることをいいます。
ping
の処理を行っているようです。 [1] Integrate Fetch into HTML · whatwg/html@7c5555a ( 版) https://github.com/whatwg/html/commit/7c5555a16f2920c02244c10756bb2f1a11e87a22
[2] Clarify the following/downloading hyperlink algorithms · whatwg/html@47e4aa0 ( 版) https://github.com/whatwg/html/commit/47e4aa05825df966848ca2c7773794576a130b88
[3] Add a 'noopener' <link rel> keyword and window feature · whatwg/html@2992ea9 ( 版) https://github.com/whatwg/html/commit/2992ea921bc75e44157451a37a807a8ce0b9a884
[4] Editorial: clarify follow a hyperlink algorithm · whatwg/html@d22a9f1 ( 版) https://github.com/whatwg/html/commit/d22a9f12e1cc13a77504fa6482b7ded6ba790b54
[70] Chrome では、ハイパーリンクをたどる場合、
ping
→ ハイパーリンクをたどる実行後に発生した fetch
→ href
の順で fetch が行われます。
ハイパーリンクのダウンロードの場合、
href
→ ping
→ ハイパーリンクのダウンロード実行後に発生した
fetch の順で fetch が行われます。
[144] Integrate referrerpolicy for a, area, iframe, and link elements (estark37著, ) https://github.com/whatwg/html/commit/2e955e66ae7f815efe09ccac6445cfbdcbf643ab
[146] Allow <a>/<area> with download="" to not require user activation (domenic著, ) https://github.com/whatwg/html/commit/5de03c7b38e7b33a49f0dcf2bcef29e8eb9a2205
[122] Revert part of "Allow <a>/<area> with download="" to not require user… (zcorpan著, ) https://github.com/whatwg/html/commit/b359209579d79a713af88ecf24b9be8fb6168adf
[8] Revamp the rules for choosing a browsing context (annevk著, ) https://github.com/whatwg/html/commit/5578a0495f826a56597288b7ba1f71163f17cdd6
[12] Make noopener stop the copying of session storage (mystor著, ) https://github.com/whatwg/html/commit/a68a1f712b641981d7367d78758596b21a04521c
[123] Editorial: centralize target attribute processing (annevk著, ) https://github.com/whatwg/html/commit/0b31844d6dcc7ef49b3815f4f709d4c0284378f1
[124] Deduplicate finding the correct target attribute · Issue #2619 · whatwg/html () https://github.com/whatwg/html/issues/2619
[125] Editorial: centralize target attribute processing by annevk · Pull Request #3007 · whatwg/html () https://github.com/whatwg/html/pull/3007
[147] Centralize checks for <a>, <area>, <form>, and <link> (annevk著, ) https://github.com/whatwg/html/commit/f3c354add894e1ac01e3732ff976aa9874a77b3f
[153] <a>, <area>, <link>, and <form> behavior · Issue #2615 · whatwg/html () https://github.com/whatwg/html/issues/2615
[154] Centralize checks for <a>, <area>, <form>, and <link> by annevk · Pull Request #2613 · whatwg/html () https://github.com/whatwg/html/pull/2613
[155] Editorial: "return, but continue" cleanup for downloads and Worker (annevk著, ) https://github.com/whatwg/html/commit/0217e1d4cb1ace836f6ef72a402b643aa879fbed
[156] Editorial: "return, but continue" cleanup for downloads and Worker by annevk · Pull Request #3397 · whatwg/html () https://github.com/whatwg/html/pull/3397
[158] Editorial: inline noreferrer processing model (annevk著, ) https://github.com/whatwg/html/commit/f47773d25a7b1a3a03c1047bbc4037d08639cf9b
[159] Support "noreferrer" for window.open() by annevk · Pull Request #4331 · whatwg/html () https://github.com/whatwg/html/pull/4331
[160] Make "triggered by user activation" match browser behavior · Issue #1903 · whatwg/html () https://github.com/whatwg/html/issues/1903
[161]
Chrome
は機嫌が悪いと(?) <a download>
を普通にクリックしてるだけなのにダウンロードがブロックされました、
ってなっちゃうことあるんだよなあ、どうなってんだか。
link
も参照。