initialize a new Document object

navigate (Web)

[88] navigate (名詞形 navigation) は、 資源へのアクセスを行い閲覧文脈の表示を切り替えたり、 ダウンロードその他の動作を発生させたりする操作です。ハイパーリンククリックやそれに相当する JavaScript の操作などにより呼び出されます。 Webブラウザーを構成する最も基礎的で重要な (しかし複雑で難解な) アルゴリズムの1つです。

仕様書

意味

[282] navigate は、閲覧文脈履歴上に新しいエントリーを作成し、 移動することを目的とした様々な一連の処理です。新しいエントリーは新たにネットワークから取得 (fetch) した資源かもしれませんし、現在閲覧文脈で表示中の文書素片かもしれません。

[283] navigate の結果閲覧文脈履歴上の移動が発生し表示が更新されるのが基本的な動作ですが、 navigate 先によってはダウンロードなどの処理が起動することがあります。 あるいは現在の閲覧文脈ではなく、新しい閲覧文脈 (新しいタブ) を開いて navigate することもあります。

文脈

[16] navigate は、仕様書で規定されている手順により (著者の指示により) 実行される場合もあれば、利用者エージェント依存の方法で (利用者の直接の指示により) 実行される場合もあります。

[17] 前者の例として location.href の設定が、 後者の例としてアドレスバーからの URL の指定があります。

[13] navigate を発生させる操作には、例えば次のものがあります。

入力

[41] navigate には、次の入力 (引数) があります。最初の3つは必須です。

[14] navigate する閲覧文脈
navigate によって新しい資源を表示するべき閲覧文脈です。
[21] 新しい資源
navigate する閲覧文脈に新たに表示するべき資源です。 ここで資源は次のものによって表されます。
要求
要求または null

(要求URL (URL記録。必須。)、 参照元 (client または no-referrer。既定値は client。)、 参照元ポリシー (参照元ポリシー。既定値は空文字列。)、 メソッド (GET または POST。 既定値は GET。) を持ちます。)

acceptSslCerts
WebDriveracceptSslCerts か、それに相当する利用者インターフェイス上の操作を利用者が行ったかどうかを表すフラグです。 既定値です。

応答
応答または null。 (embed/objectfetch の結果、 ネットワークエラーなど。)

[24] object 要素embed の処理では、 資源fetch が開始されてから navigate が呼び出されることがあります。

[55] navigate の結果表示される navigate の選択肢を利用者が選んだ場合にも、 (再度 fetch するのは無駄なので) fetch 結果付きで navigate を呼び出すべきかもしれません。

[186] ハイパーリンクをたどる場合window.openoverridden reloadは、 URL のかわりにソースやエラーページが指定された navigate が実行されることもあります。

[188] iframe srcdoc文書では URL と共にソースが指定されます。

[189] document.open で追加されるセッション履歴エントリーエントリー更新では指定されたソースが使われます。

[225] change the encoding応答を指定して、または URLfetch 条件を指定しての navigate を呼び出すことがあります。その際 a known definite encoding も指定されます。

ナビゲーション型
form-submission または other既定値other
[15] 始点閲覧文脈 (source browsing context)
navigate の開始に責任を持つ閲覧文脈です >>12始点閲覧文脈は、 navigate する閲覧文脈について navigate を認められているか、いないかのいずれかです。
[19] 例外有効 (exceptions enabled) >>12
navigate できない時に例外を投げるかどうかのフラグです。
[22] reload-triggered navigation >>12
再読込操作かどうかのフラグです。 このフラグが設定されていれば、素片識別子を無視すると現在表示中の文書URL と等しい時でも、 navigate が行われます。 利用者アドレスバーURL をした場合、 ブックマークを選択した場合、 プロセス間通信により他のアプリケーションから URL を与えられた場合など、 著者以外の指示で navigate を実行する場合には、 このフラグを設定するべきと考えられます。
[238] 新しい最上位閲覧文脈
閲覧文脈を使わなかった時にタブを閉じるべきかどうかに影響します。 閲覧文脈の選択を参照。
利用者閲覧文脈を明示した
allowed to navigate をバイパスするか否かに影響します。
[98] エントリー更新するエントリー
エントリー更新のための navigate の場合には、そのセッション履歴エントリー
[179] キャッシュ上書き
スーパーリロードによる navigate 時に指定されます。 再読込参照。
[190] reload override flag
document.open により破棄された文書を再表示するために使います。
[195] iframe srcdoc文書
iframe srcdoc文書かどうかを表します。
[245] 文書の起源 実効スクリプト起源
新しい資源URLschemedatajavascript の場合に使われる可能性のある起源実効スクリプト起源です。 data: URL では、 スクリプトによる呼び出しの場合は現職設定群オブジェクト起源実効スクリプト起源、 そうでない場合は要素節点文書起源実効スクリプト起源です >>244javascript: URL では、 navigate する閲覧文脈活性文書起源実効スクリプト起源です >>244。 (いずれにせよ、 navigate 呼び出し時点での値です。)
提案ファイル名
navigate の結果ダウンロードとなった時に使うファイル名です。 リンク元要素download 属性値が設定されます。
遷移型
ページ遷移を発生させた利用者等の操作の種類を表す値です。
遷移修飾子
navigate の発生要因を表す値のリストです。

[310] 次のオプションは廃止されました:

[20] 明示的自己ナビゲーション上書き (explicit self-navigation override) >>12
navigate する閲覧文脈の選択方法についてのフラグです。 seamlessiframe 内でのリンクが外側の閲覧文脈navigate に読み替えられるべきかどうかの判断に影響します。 (target による閲覧文脈の選択と navigate は別タスクで行われることがあるため、 その間に seamless かどうかは変化することがあり、 一般に navigate 呼び出し前に予めその判断を済ませておくことはできません。)
[43] 上書きURL (override URL) >>12
文書の番地として使う URL です。外部から設定されるのは override reload やそれに相当する履歴の探索の時だけですが、 navigate 中に javascript: の処理で設定されることもあります。
[65] triggered by user activation
allowed to navigate外部アプリケーションを起動するべきかどうかに影響します。 navigate 呼び出し元のタスクによって決まります。 triggered by user activation閲覧文脈の選択を参照。

[116] navigate する閲覧文脈新しい資源はアルゴリズム内で変更されることがあります。

[121] navigateunload a documentprompt to unload a document が実行中かどうかにより分岐することがあります。それらが同じ閲覧文脈navigate並列に実行されることは無いので、事実上、それらの手続きの内側での呼び出しかどうかを調べるものです。

[120] navigatetraverse the history by a deltawindow.stop は、 同じ閲覧文脈に関する他の navigate にアクセスすることがあります。

[167] navigate から呼び出した unload a document を実行中か調べることもあります。

[122] navigate は、取り消しされることがあります (>>123)。 取り消しフラグは取り消されたかどうかを表します。 取り消された場合は理由が設定されます。

[108] 入力ではありませんが、アルゴリズム中で mature フラグを使います。どちらも初期値はです。 >>12 時刻起源の初期値は未定義です。

[177] mature フラグは traverse the history by a delta からも参照されます。

[422] かつては gone async フラグがあり、 リダイレクトに関する複雑な処理が記述されていました。 2016年7月改訂でこれを使わない形に改められました。

[117] 入力ではありませんが、アルゴリズム内で新しい文書が作成されることがあります。

[42] 始点文書は、navigate 開始時点の始点閲覧文脈活性文書です。 始点設定群オブジェクトは、 navigate 開始時点の始点文書環境設定群オブジェクトです。

[330] HTML Standard は「navigate 開始時点」とは規定していませんが、 リダイレクトを含む場合、始点閲覧文脈の他の navigate によって活性文書が変化する可能性がありそうで、 その場合でも元の活性文書を使うのが適切そうです。

概略

[226] navigate は次のように複雑に動作します。

start
開始 >>18
->
terminate
->
url
terminate
停止
>>
5
url
URL >>162
->
fragment
->
fetch
->
nondoc
->
outside
fetch
Fetch >>145
->
cleanup
->
res
res
応答 >>26
->
mime
->
nondoc
->
outside
mime
MIME 型 >>44
->
doc
->
nondoc
->
outside
doc
文書 >>30
->
history
nondoc
非文書 >>47
>>
1
->
history
outside
文脈外 >>48
>>
2
->
cleanup
history
履歴 >>95
->
cleanup
fragment
素片 >>163
>>
4
->
cleanup
cleanup
停止 >>109
v
>>
5

navigate の開始

[18] navigate は、

次のようにしなければなりません >>12

  1. [293] 利用者閲覧文脈を明示したの場合で 仕様書になし始点閲覧文脈navigate する閲覧文脈navigate することを認められていない場合、
    1. [296] 例外有効なら、
      1. [453] SecurityError 例外を投げます。
    2. [237] そうでなければ、
      1. [454] 利用者エージェントは、利用者に次の選択肢を提示しても構いません。 (>>236 も参照)
    3. [297] 停止します。
  2. [298]
    ... なら、
    1. [450] ここで停止します。
  3. [451] prompt to unload a document を実行中で、 それが navigate する閲覧文脈活性文書に関するものなら、ここで停止します。
  4. [452] navigate する閲覧文脈についての URL に基づく処理 (>>162) に移ります。

[236] 入れ子閲覧文脈navigate するべきところ、かわりに >>237 操作を利用者に選択させるのは、著者砂箱化の要求を無視する場合もあり、 危険かもしれません >>12Webブラウザーは、 popup sandboxing flag set を活用するなど、安全性への配慮が必要かもしれません。

[404] webNavigation API の onBeforeNavigate はこの付近のタイミングで現在時刻と共に呼び出されるものと思われますが、 明文規定は存在しないようです。

[458] ハイパーリンク利用者が他の閲覧文脈ドラッグしたことにより navigate が開始された場合など、 navigate 開始の時点で始点閲覧文脈が (本来なら) 既に消滅している閲覧文脈であったり、 活性文書が別のものに変化していたりする可能性があります。 そうした場合でも元の閲覧文脈が始点であるものとして処理を続けるべきかもしれませんし、 始点がない新しい navigate として扱うべきかもしれません。


[491] Web App Manifestnavigation scope と称して Webアプリケーションの「内側」の範囲を規定することができ、 その外側へのリンクを拒んだり、Webアプリケーションとは別の Webブラウザー閲覧文脈navigate したりすることになっています。 この処理もこの段階で行う必要があります (が、現時点で HTML Standardnavigate の処理と統合されていません)。

navigation scope も参照。

[492] 埋め込みブラウザーも、アプリケーションに対して navigate 可能な URL の範囲を限定する機能を提供している場合があり、 同様に検査が入ることがあります。

[493] なお、これらの検査は、後述の通り HTTPリダイレクト後の URL に対しても行う必要があります。

URL に基づく処理

[162] URL に基づく処理は、 閲覧文脈について次のようにします >>12

  1. [382]
    ... のすべてを満たすなら、
    1. [387] 素片識別子に navigate (>>163) する処理に移り、こちらはここで終わります。
  2. [597] 活性文書navigateする起源を、 閲覧文脈活性文書起源に設定します。
  3. [599] スクリプトからの呼び出しの場合、
    1. [598] 現職navigateする起源を、 現職設定群オブジェクト起源に設定します。
  4. [600] それ以外の場合、
    1. [601] 現職navigateする起源を、 navigate を開始した要素節点文書起源に設定します。
  5. [423] 利用者エージェントが実行中の各 navigate navigate について、 順に、
    1. [602] navigate閲覧文脈閲覧文脈で、 navigatematureの場合、
      1. [603] navigate を取り消し (>>123) します。
  6. [411] prompt to unload a document を実行します。
  7. [412] 取り消しフラグが設定されているか、 refused to allow the document to be unloaded なら、
    1. [413] 後片付け (>>109) に移り、こちらはここで終わります。
  8. [414] 閲覧文脈活性文書を、 abortします。
  9. [415] 時刻起源を、現在時刻に設定します。 >>416
  10. [477] 閲覧文脈子供閲覧文脈であるの場合、
    1. [478] 閲覧文脈delaying load events mode を、 に設定します。
  11. [181] 砂箱フラグ群を、 砂箱化フラグ群を決定した結果に設定します。
  12. [155] 並列に新しい資源要求または新しい資源応答null でない方, 現職navigateする起源, 活性文書navigateする起源, 砂箱フラグ群について fetch またはそれに相当するもの (>>145) を実行します。
[196] navigate の続きの処理は並列に実行され、 navigate の呼び出し元はそちらの次の処理へと進みます。
[224] 素片識別子が無い URL なら、文書の番地と同じ URL であっても、素片識別子への navigate ではなく通常の navigate になります。

[410] 新しい資源URLuserinfo が含まれる場合、 Chrome は無視する (認証に使わない) ようです。 Firefoxフィッシングの可能性を指摘する confirm モーダルダイアログを表示し、利用者が拒んだ場合は何もしないこととするようです。

[403] 事前レンダリングが実装されていて本 navigate で利用できる場合には、 fetch のかわりに事前レンダリングへの差し替えが行われるものと思われますが、 明文規定はありません。

fetch またはそれに相当するもの

[145] fetch やそれに相当する操作は、 要求または応答資源, 現職navigateする起源, 活性文書navigateする起源, 砂箱フラグ群について、 次のようにします。

  1. [146] 資源応答の場合、
    1. [201] navigate応答の処理 (>>26) を実行します >>12
      要求
      null
      応答
      新しい資源応答
      閲覧文脈
      navigateする閲覧文脈
      始点閲覧文脈
      始点閲覧文脈
      ナビゲーション型
      ナビゲーション型
      現職navigateする起源
      現職navigateする起源
      活性文書navigateする起源
      活性文書navigateする起源
      砂箱フラグ群
      砂箱フラグ群
  2. [147] それ以外で、 資源URLschemejavascript の場合、
    1. [148] タスクをキューに追加します。 >>12
      処理
      1. [585] 応答を、 資源始点閲覧文脈navigate する閲覧文脈について、 javascript: URL要求を実行した結果に設定します。
      2. [586] 新しい資源応答ナビゲーション型始点閲覧文脈閲覧文脈現職navigateする起源活性文書navigateする起源砂箱フラグ群について、 navigate応答を処理します。
      タスク源
      DOM操作タスク源
      文書
      活性文書閲覧文脈
  3. [149] それ以外で、
    ... 最適AppCacheからの新しい資源fetch を呼び出します >>12
  4. [154] 資源URLschemefetch scheme の場合、
    1. [198] navigate fetchの処理を実行します。
      要求
      要求
      閲覧文脈
      navigateする閲覧文脈
      始点閲覧文脈
      始点閲覧文脈
      ナビゲーション型
      ナビゲーション型
      現職navigateする起源
      現職navigateする起源
      活性文書navigateする起源
      活性文書navigateする起源
      砂箱フラグ群
      砂箱フラグ群
  5. [199] それ以外なら、
    1. [202] 資源URLnavigateする閲覧文脈について、 navigate URL schemeの処理を実行します。

[214] 以前は、 Webブラウザー依存の条件 (>>206) 次第で閲覧文脈外 (>>48) または非文書表示に移れることになっていました。 2016年7月の改訂で条件が明確化されたのですが、それによって、例えば about:blank 以外の about: URL の表示や、一部の http: URLアプリが起動される機能が認められない形になってしまいました。

[90] プラットフォームによっては、 (http: URL も含め) URL schemeURL のパターンに対して処理するアプリケーションを登録できるものがあります。 その場合には、候補が1つならそれを起動したり、候補が複数なら候補リストを表示したりできます。 Webブラウザー自身が扱えるものなら、Webブラウザー外部アプリケーションかも選択できたりします。

[455] Windows は古くから (URL scheme ごとに1つだけ) 実行するアプリケーションファイル名コマンドライン引数DDE オプションなどをレジストリーに登録できる形を採っています。

[456] Android では古くから URL scheme ごと、あるいは http: などの URL のパターンに対してアプリケーションを登録でき、 複数ある場合は利用者が一覧から選択したり、既定のものを決定できたりします。

[457] iOS では URL scheme ごとにアプリケーションを登録できる他、 http: などの URL のパターンに対してアプリケーションを登録できる機能は Universal Links と呼ばれています。

[91] http: URLHTML文書のすべてをそうした形で処理するのは、 Webブラウザーとして実用的では無さそうです。一定期間選択結果を覚えておいたり、 同じ起源からの navigate なら無条件で Webブラウザー自身で処理することにしたりしないと、 頻繁に確認ダイアログを表示することになるかもしれません。

[464] 利用者が結局自 Webブラウザーを使うことを選択した場合、 同じ navigate が処理を継続するのか、 新しい navigate を起動するのかは不明です。 後者の場合、再び候補からの選択を利用者に提示すると永遠に Webブラウザーでは開けないことになってしまいますから、 利用者の意図的な選択かどうかで分岐する必要がありそうです。 著者の指定に基づく navigate であるか、 外部アプリケーションからの起動オプションなどによる指定であるかによって分岐するのが良いでしょうか。 (外部アプリケーションが明示的に WebブラウザーURL を渡す場合も、 何かのアプリで開くのではなく、 Webブラウザーで開きたいのだと判断できそうです。 例えばニュースアプリの「ブラウザーで開く」機能とか。)

[153] Chrome など一部の Webブラウザーは、 Safe Browsing により URL を検査し、危険と判断すればネットワークエラー非文書表示に移ります。


[398] navigate fetchの処理 (process a navigate fetch) は、 要求, 閲覧文脈, 始点閲覧文脈, ナビゲーション型, 現職navigateする起源, 活性文書navigateする起源, 砂箱フラグ群について、 次のようにします >>12

  1. [462] 予約済み環境を、新しい環境に設定します。
    [463] 環境
    識別子
    新しい固有識別子
    作成URL
    要求URL
    対象閲覧文脈
    閲覧文脈
  2. [151] 要求の各欄を次の通り設定します。
    [461] 要求
    クライアント
    始点設定群オブジェクト
    終点
    document
    モード
    navigate
    credentialsモード
    include
    URL credentials利用フラグ
    リダイレクトモード
    manual
    起源
    navigate する閲覧文脈包含子nullなくnavigate する閲覧文脈包含子閲覧文脈適用範囲起源がある場合、 navigate する閲覧文脈包含子閲覧文脈適用範囲起源
    キャッシュモード
    キャッシュ上書きにより定める 仕様書に規定なし
    置換クライアント識別子
    閲覧文脈活性文書関連設定群オブジェクト識別子
    予約済みクライアント
    予約済み環境
  3. [443] 要求ナビゲーション型始点閲覧文脈閲覧文脈について Should navigation request of type from source in target be blocked by Content Security Policy? を実行した結果が Blocked なら、
    1. [444] ネットワークエラーについて、続きの処理 (>>156) を実行します。
  4. [445] それ以外なら、
    1. [152] fetch します。
      要求
      要求
      process response
      続きの処理 (>>156)

[156] 続きの処理は、 応答について、 次のようにします >>12

  1. [362] 応答location URL失敗なら、
    1. [363] 要求応答について、HTTPリダイレクトfetchを実行します。 process response は、 >>156 とします。
  2. [364] それ以外で、応答location URLURL記録なら、 応答location URLschemeにより、
    HTTP(S) scheme
    要求応答について、HTTPリダイレクトfetchを実行します。 process response は、 >>156 とします。
    blob, file, filesystem, javascript
    応答を、ネットワークエラーに設定します。
    その他の fetch scheme
    navigate fetchの処理を実行します。
    要求
    要求
    URL
    応答location URL
    閲覧文脈
    閲覧文脈
    始点閲覧文脈
    始点閲覧文脈
    ナビゲーション型
    ナビゲーション型
    それ以外
    navigate URL schemeの処理を実行します。応答location URL閲覧文脈を引き渡します。 こちらはここで終わります。
  3. [365] Fallback in prefer-online mode:
    ... のすべてを満たすなら、
    1. [366] 最適AppCacheから応答URLで識別されるエントリーを得ます。
    2. [367] そのエントリーが foreign でないなら、
      1. [368] 応答を、そのエントリーの応答に設定します。
      2. 利用者に対して失敗したこととキャッシュを使うことを示して構いません。
  4. [369] Fallback for fallback entries:
    ... のすべてを満たすなら、
    1. [424] 最適AppCachefallback namespace に対する fallback resource を得ます。
    2. [425] そのエントリーが foreign でないなら、
      1. [426] 応答を、そのエントリーの応答に設定します。
      2. [427] 利用者に対して失敗したことと fallback resource を使うことを示して構いません。
  5. [428] navigate応答の処理 (>>26) を実行します。
    要求
    要求
    応答
    応答
    閲覧文脈
    閲覧文脈
    始点閲覧文脈
    始点閲覧文脈
    ナビゲーション型
    ナビゲーション型
    予約済み環境
    予約済み環境
    現職navigateする起源
    現職navigateする起源
    活性文書navigateする起源
    活性文書navigateする起源
    砂箱フラグ群
    砂箱フラグ群

[489] ここで、HTTPリダイレクトの場合に navigate の一部分を繰り返し (再帰的に) 実行する形になっています。 navigate における HTTPリダイレクトの取り扱いは、 素片識別子の取り扱いなど、細部が微妙に navigate 以外の fetch での取り扱いと異なっています。

[490] URL の範囲の検査 (>>491) もここで行われる必要があります。

[591] HSTSMixed Content のような navigate 以外との共通の処理は、 fetch 内部で実行されます。

[370] 以前は安全なメソッドPOST の場合を除き、 リダイレクト先も同じ起源でなければエラーとしてそれ以上処理しないことになっていました。 WF2 時代にはフォームの提出PUTDELETE を使って navigate できました。 Opera (Presto) がこれを実装していました。 しかし現在では GETPOST でしか navigate する方法はありません。

応答の処理

[26] 要求応答閲覧文脈始点閲覧文脈ナビゲーション型予約済み環境砂箱フラグ群に関するnavigate応答の処理 (process a navigate response) は、次のようにします。

  1. [25] 取り消しフラグが設定されていれば、終わりとします (>>109 へ)。
  2. [52] それ以外で、
    ... のいずれかの場合、
    1. [440] 非文書表示 (>>47) によることとします >>12
    2. [527] 予約済み環境について環境廃棄手順群を実行します >>12
  3. [51] それ以外で、応答状態204205 なら、終わりとします (>>109 へ) >>12
  4. [53] それ以外で、応答Content-Disposition: attachment なら、ダウンロードとします >>12 (閲覧文脈外の処理 >>48)。
  5. [158] それ以外なら、 砂箱フラグ群についてMIME型依存の処理 (>>44) に進みます >>12
[157] navigate応答の処理は、navigate 本体の他に、 javascript: URLへのnavigate からも呼び出されます。

[183] Webブラウザーによっては、応答状態4xx5xx本体が一定サイズ以下の時、 非文書表示とすることがあります (>>134)。

[408] おそらく既読化もこの段階で行われると思われます。 既読化には新しい資源URL応答URLを引き渡します。

リダイレクト前の URL既読化はいつの時点か?

[132] 2016年6月の改訂までは次のような規定がありましたが、削除されました。

[184] TLSクライアント認証のダイアログの処理は fetch 側で規定されています。 401407HTTP認証ダイアログの処理は、 以前より明確な規定はありませんが、将来的に fetch 側で規定されるものと思われます。

[284] クライアント認証のダイアログは、処理が更に進んだ応答の受信の後の方でも表示されることがあります。

[54] 改訂前は HTML StandardHTTP の規定に委ねており、理論上はこれら以外にも HTTPヘッダー等の指示に基づく動作を行う余地が残されていました (が仕様書注釈で、 他のものは考えつかないと記されていました)。 fetch との統合と明確化により、 そうした曖昧な規定は削除されて動作が明確になりました。

[104] Chromenavigate401 が返されると空白ページを開いてモーダルダイアログを表示します。 前からこんな挙動でしたっけ?

MIME 型依存の処理

[44] navigate により fetch (相当) を行い最終的に処理するべき資源が確定したら、 その資源MIME型によって適切な処理を行います。

[45] ここで MIME型は、 sniffed MIME type を使わなければなりません >>12

Fetch StandardMIME Sniffing の規定に基づき、 HTTP Content-Type: ヘッダーを無視することがあります。

[46] 利用者エージェントは、MIME型と設定に基づき、 閲覧文脈, , 要求, 応答, 現職navigateする起源, 活性文書navigateする起源, 砂箱フラグ群について、 次のいずれかの処理を行わなければなりません >>12

[50] いずれを選択するかは実装や設定に依存します (>>206)。 HTML Standard 仕様上「設定により」となっており、完全には規定されていませんが、 実際上は任意の動作が許されているわけではありません。例えば text/html を常にダウンロードとして扱うような実装は Web互換とは言えません。

[68] 著者は、Webブラウザーの実装や設定によって挙動が変わり得る MIME型を使わないよう、使う場合は特定の挙動を仮定しないよう注意するべきでしょう。

[69] 例えば PDFプラグインにより表示されるか、外部アプリケーションにより表示されるか仮定するべきではありません。

[399] この段階に達した時点で、 webNavigation APIonCommitted を呼び出せるものと思われます。 遷移型遷移修飾子群と現在時刻を引き渡します。

閲覧文脈内の文書表示

[30] 閲覧文脈内に内容をレンダリングする方法は、 次の各 MIME型について規定されています。

[31] HTML文書
text/html >>12
[32] XML文書 (>>33 も参照)
明示的対応XML型以外の XML MIME型 >>12
[35] 平文
text/plainJSON などのテキストファイル (明示的対応JSON型以外) >>12
[37] 媒体
利用者エージェントが対応している画像形式動画形式音声形式 >>12
[38] プラグイン
外部アプリケーションを使って閲覧文脈内に内容をレンダリングする型 >>12

[216] 実際のWebブラウザーは、ごく限られた XML MIME型を除き、ほとんどの XML MIME型を (XML としてではなく) 未対応として扱うことがあります。

[36] HTML Standard では multipart/x-mixed-replace の処理方法も規定されています >>12 が、 最近の Webブラウザーの多くからは削除されています。 (画像形式としての MJPEG over HTTP には対応していますが、 navigate では対応しないようになっています。)

[215] Webブラウザーによってはこの他にも独自の MIME型の処理を実装している場合があります。 例えば IEChromeMHT に対応しています。

閲覧文脈内の文書の作成

[70] navigate の結果として閲覧文脈で表示する文書は、 閲覧文脈, 要求, 応答, 現職navigateする起源, 活性文書navigateする起源, 砂箱フラグ群について、 次のように作成します。 HTML文書 (an HTML document is to be loaded の処理)平文の場合は、次のようなタスクネットワークタスク源キューに追加しなければなりません >>12XML文書の場合も、次のように行います >>12媒体プラグインの場合も、次のようなタスクネットワークタスク源キューに追加するべきです >>12非文書表示の場合 (>>47) も、 要求応答取り消しなどについて、 次のように行うべきです。

  1. [135] 取り消しフラグが設定されていれば、何もしない処理 (>>48) に移り、こちらはここで終わります。
  2. [102] 文書を、 文書オブジェクトの作成と初期化 (>>593) の結果に設定します。 >>12
    HTML文書, 平文文書, 媒体文書, プラグイン文書, 非文書表示の場合 html, XML文書の場合 xml
    内容型
    HTML文書, 非文書表示の場合 text/html, それ以外の場合
    要求
    非文書表示の場合 null、それ以外の場合要求
    応答
    非文書表示の場合 null、それ以外の場合応答
    閲覧文脈
    閲覧文脈
    現職navigateする起源
    非文書表示の場合 null、それ以外の場合現職navigateする起源
    活性文書navigateする起源
    非文書表示の場合 null、それ以外の場合活性文書navigateする起源
    砂箱フラグ群
    非文書表示の場合空集合、 それ以外の場合砂箱フラグ群
  3. [197] iframe srcdoc文書が設定されていれば、 文書iframe srcdoc文書とします。
  4. [192] reload override flagなら、
    1. [193] 新しい文書reload override flag を、に設定します >>191
    2. [194] 新しい文書reload override buffer を、新しい資源応答本体文字列に設定します >>191
  5. [417] 新しい文書時刻起源を、時刻起源に設定します >>416
  6. [105] 構文解析器構文解析器を作成し (>>77)、 新しい文書を関連付けます >>12
  7. [286] navigate する閲覧文脈入れ子閲覧文脈の場合、 >>285
    1. [287] navigate する閲覧文脈非保安要求ポリシーが「格上げする」なら、
      1. [288] 新しい文書現職設定群オブジェクト非保安要求ポリシーを、「格上げする」に設定します。
      2. [289] navigate する閲覧文脈非保安navigate格上げ集合の各値について、 新しい文書現職設定群オブジェクト非保安navigate格上げ集合に追加します。
  8. [223] 必要があれば、ブラウザー拡張によって指定された CSS を読み込んだり、内容スクリプトを実行したりします。
  9. [106] これより後、スクリプトの実行や stop parsing よりも前に、 (他のモードに移行 (>>33) したり取り消しされたりしていなければ) セッション履歴を新しいページで更新 (>>95) を実行します >>12
[253] 初期「about:blank」文書なら Window オブジェクトが新しい文書に再利用されます。 これは Window文書との一対一対応関係が崩れる例外の1つです。
[254] 仕様書上はセッションストレージ領域の初期化に関する規定 >>258 がありますが、実際上は sessionStorage の最初の利用時まで遅延させられます。

[79] XML文書の場合タスクキューに追加しなければならないと仕様書には明記されていませんが、 おそらくそうすることが想定されていると思われます。もっともそうしないとしても著者から違いを観測できるのか不明です。できたとしても困難と思われます。

[75] MIME型の設定においては、XML文書以外の時は新しい文書HTML文書フラグを設定しなければなりません >>12プラグインの時はプラグイン文書フラグを設定するべきです >>12。 また新しい文書内容型HTML文書なら text/html に、 平文なら sniffed MIME type に設定しなければなりません >>12媒体プラグインなら sniffed MIME type に設定するべきです >>12

[76] XML文書の場合の文書内容型の設定の規定はなぜかありません。

[235] 更に sniffed typeimage/svg+xml であれば、 その旨のフラグ (SVG navigate フラグ) を設定する必要があります。

getSVGDocument で参照されます。

[593] 文書オブジェクトの作成と初期化 (create and initialize a Document object) は、 , MIME型内容型, 要求, 応答, 閲覧文脈, 現職navigateする起源, 活性文書navigateする起源, 環境またはnull予約済み環境, 砂箱フラグ群について、 次のようにします >>12

  1. [251] 最終砂箱フラグ群を、 砂箱フラグ群応答forced sandboxing flag set合同に設定します。
  2. [605] 起源を、 閲覧文脈, 要求URL, 最終砂箱フラグ群, 現職navigateする起源, 活性文書navigateする起源について、 起源を決定した結果に設定します。
  3. [484] 機能ポリシーを、 navigate する閲覧文脈起源応答について応答から機能ポリシーを作成した結果に設定します。
  4. [248]
    ... のすべてを満たすのではない場合、
    1. [336] realm実行文脈を、 新しいJavaScript realmを作成した結果に設定します。
      大域オブジェクト
      新しい Window
      大域this束縛
      navigate する閲覧文脈WindowProxy
    2. [337] realm実行文脈予約済み環境について閲覧文脈環境設定群オブジェクトの設定を実行します。
  5. [606] 文書を、 新しい文書に設定します。
    内容型
    内容型
    起源
    起源
    活性砂箱化フラグ集合
    最終砂箱フラグ群
  6. [564] 文書機能ポリシーを、機能ポリシーに設定します。
  7. [553] 要求nullない場合、
    1. [554] 文書URLを、 要求現在URLに設定します。 >>12
  8. [555] それ以外の場合、
    1. [556] 文書URLを、 応答URL に設定します。 >>12
  9. [185] リダイレクトを辿った場合には、最終的な URL に設定されます。

    [329] view-source: も参照。

  10. [279] 文書HTTPS状態を、応答HTTPS状態に設定します。
  11. [378] 文書参照元ポリシーを、応答について Referrer-Policy: ヘッダーを構文解析した結果たる参照元ポリシーに設定します。
  12. [141] 文書要求応答について、 DocumentのCSPリストの初期化をします。
  13. [379] 要求参照元no-referrerない場合、
    1. [250] 文書参照元を、要求参照元に設定します。
  14. [510] 更新を、応答Refresh: ヘッダーの値に設定します。
  15. [511] 更新null 以外の場合、
    1. [512] 文書更新同型復号した結果について、 共有宣言的更新手順群を実行します。
  16. [567] 新しい閲覧文脈厳密混合内容検査フラグの場合、 >>568
    1. [569] 文書厳密混合内容検査フラグを、 に設定します。
  17. [607] 文書を返します。

[604] までは、 作成済みの文書オブジェクトの初期化 (initialize the document object) >>246 の手順群として規定されていました。

文書木の構築

[77] 表示する文書木を構築するために使う構文解析器構文解析器は、 HTML文書ならHTML構文解析器XML文書ならXML構文解析器です。 ただし平文の場合はテキストファイルのDOM構築方法を使います。 媒体の場合は構文解析器のかわりに媒体文書のDOMを構築し、 プラグインの場合は構文解析器のかわりにプラグイン文書のDOMを構築します。 非文書表示の場合は構文解析器のかわりに任意の DOM を構築できます (>>84)。

[72] 構文解析器は、 fetch によって得られた応答MIME型に含まれる文字符号化の指定を入力として受け取ります。 ここでの MIME型は、 sniffed MIME type ではありません >>12

[71] process response body は、次のようにしなければなりません

  1. [312] 構文解析器入力バイト列に受信したバイト列を連結します >>12
  2. [313] 構文解析器の処理を行います >>12

[73] process response end-of-file は、次のようにしなければなりません

  1. [314] 構文解析器の入力として暗黙の EOF 文字を与えます >>12
  2. [315] 構文解析器の処理を行います >>12

[316] process response bodyprocess response end-of-file を実行するネットワークタスク源タスク実行可否判断は、 次のようにしなければなりません

  1. [319] 構文解析器字句化器をブロックフラグが設定されていれば、
    1. [320] を返します。
  2. [318] それ以外なら、
    1. [317] を返します。

[321] 構文解析器script 要素の処理により、 字句化を行うタスクの処理が中断されることがあります。 script を参照。

[74] 構文解析器は、構文解析中のいずれかのタイミングで文書の文字符号化を設定します。

[78] 構文解析器プラグイン文書の構築処理は、 文書要素文書に挿入するタイミングで AppCache選択アルゴリズムを実行します >>12

[221] 文書要素は、XML構文解析器XML 整形式制約違反を通知するものかもしれません。 (XML構文解析器参照。)

[222] Webブラウザーによっては、ブラウザー拡張内容スクリプト文書要素の最初の挿入時点で実行するものもあります。

[33] XML文書の場合、文書要素名前空間によっては他の方法 (>>47>>48) で表示することにしても構いません >>12

[34] 例えばフィードは、XML として DOM を表示するのではなく、 Webブラウザー組み込みのフィードビューアーにより表示できます >>12

[82] その場合、(少なくても仕様書のアルゴリズム上は) 作成されかけた XML文書オブジェクトに著者がアクセスする方法はありません。
[118] 仕様書にはありませんが、理論上は abort a document を実行するべきかもしれません。 (文書要素より前に xml-stylesheet 処理指令fetch が行われていたら、 abort a document により取り消されます。)

[560] この規定に従う実装は存在しないとして、 に廃止されました。 >>559

[229] xml-stylesheet により XSLT スタイルシートが指定されているときは、 XSLT によって変換したものを DOM として表示することになります。

これがどのように処理されるかはどこでも規定されていません。 フィードリーダーモードになることがあるのか、 unstyle document 表示もあるのか、どの時点で表示が切り替わるのか、 スクリプトから何にアクセスできるのかなど謎は多いです。

[231] >>143ChromeXSLT スタイルシートにより表示しますが、 FirefoxIEフィードとして表示するようです。 text/xml で、

<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.technet.com/utility/feedstylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>日本のセキュリティチーム</title>
... から始まっています。

[173] CSS などのない XML文書 (unstyle document)は、 その木構造が表示されます。

これは unstyled document view と呼ばれる DOM の特別な表示モードなので、非文書表示モードではありません。

[94] 媒体プラグイン>>33 により非 DOM 表示に切り替える場合には、 仕様書上は navigate による fetch はそのまま放置され、 改めて img 要素などで fetch が発生することになっています。 実際には Webブラウザーキャッシュにより、あるいは何らかの特別な仕組みにより、 navigate による fetch の結果あるいは経過が媒体の表示処理やプラグイン等に引き渡される可能性もあります。

favicon

[267] 最上位閲覧文脈の場合、 favicon の取得も行われます。

[249] 仕様書では明確なタイミングは規定されていないのですが、 link 要素で指定されていればそれを使い、 指定されていない場合は /favicon.ico にアクセスするため、 どちらを使うか判定できる十分な構文解析が進んだ段階ということになります。

[301] 非文書表示の場合、特にネットワークエラーの場合は /favicon.ico へのアクセスは行わないのが適切と思われます。

[302] Chrome はアクセスしないように見えますが、すべての場合にそうなのかは不明です。

閲覧文脈内の非文書表示

[47] 閲覧文脈内であっても DOMレンダリングするのではなく、 専用ビューアーやエラーメッセージなど特別なものを表示する場合があります。

[49] 仕様書では閲覧文脈内に表示することを“行内 (inline) ”と言っています。

[59] fetch (相当) を行う前にこちらの処理方法に移行する場合と、 fetch 結果をこちらの方法で処理する場合があります。

[23] 例えば URL scheme に対応していないエラーを表示部に示す場合や、 登録済みプロトコル取扱器利用者に選択する画面を表示部に示す場合があります。 (選択した取り扱い器を実行する場合は、 navigate を改めて実行することになります。) >>12

[60] 例えば大多数の about: URL のように fetch ではアクセスできない特別な Webページを表示させる場合が該当するかもしれません。

[131] http: URL からリダイレクトabout: URL が示された場合や http: ページのハイパーリンクからの file: への navigateフレームによる navigate のように、 特別なページの表示は文脈によって認められないこともあります。 >>174 も参照。

[39] 例えば内容を (DOM ではなく) 専用の方法で表示する場合、 MIME型に対応していないエラーを表示部に示す場合や、 registerProtocolHandler で登録された取り扱い器を利用者に選択する画面を表示部に示す場合があります。 (選択した取り扱い器を実行する場合は、 navigate を改めて実行することになります。)

[81] WebブラウザーMUAが統合された製品で、それぞれが別のを開くのではなく、 閲覧文脈内に MUA 機能が表示されるような場合は、 MUA 機能の表示は本項に該当しそうです。

[92] かつてはネットワークエラーダイアログで表示する Webブラウザーもありましたが、 現在では多くの Webブラウザーが行内表示を使っています。

[93] 本来の内容の代わりに Safe Browsing エラーが閲覧文脈内に表示されることもあります。

[130] 仕様書上明記はされていませんが、リダイレクトループを検出したらネットワークエラーとして表示する必要があります。

[203] 入れ子閲覧文脈の深さが限界を超えたら、エラーページを表示するべきかもしれません。

[394] FirefoxMIME型 application/http-index-format の表示に対応しています。 FTPディレクトリーの表示に使われていますが、それ以外でも使うことができます。

[83]DOM の行内内容を閲覧文脈に表示する場合でも、文書の作成は DOM の表示の場合と同じく行います (>>77)。

[84] DOM の構築の段階では、任意のDOM木を作成して構いません (Document のみ でも構いません)。いずれにしても AppCache選択アルゴリズムマニフェスト無しで実行しておかなければなりません。 また完了時に stop parsing を実行しなければなりません >>12

[85] レンダリングは通常の規則で DOM を表示しても構いませんし、 特別な方法を使っても構いません >>12

[96] 仕様書上は navigate による fetch が行われた場合、そのまま放置されています。 実際には Webブラウザーキャッシュにより、あるいは何らかの特別な仕組みにより、 navigate による fetch の結果あるいは経過が非 DOM 表示の処理へと引き渡される可能性もあります。

[307] 次のような URL scheme について非文書表示が使われています。

[134] Webブラウザーによっては、応答状態4xx5xx本体が一定サイズ以下の時、 本体文書として表示するかわりに、 Webブラウザー側のエラーを非文書表示することがあります。

Webブラウザー側としては、サーバーソフトウェアから自動生成されたような (しばしばローカライズされていない) 不親切な定形エラーメッセージを表示するくらいなら、 より利用者にわかりやすいエラーをかわりに表示したいということなのでしょう。 これを不服に思う著者サーバーソフトウェアの開発者も少なく無いようで、 そのような判定をされないように本体に余分な詰めデータを付け足すことがあります。

[375] 通常の DOM ではなく非文書表示とするのは、実装上の都合の他に、 セキュリティー上の理由もある場合があります。例えば、 ネットワークエラーの詳細はプライバシーに関わる情報を含むことがありますから、 たとえ同じ起源の他の通常の文書スクリプトであっても、 アクセスできるべきではなさそうです。 (実際には、状況に応じて、 単に非文書表示であるだけでなく、不透明起源を持つものと扱うのがより安全かもしれません。)

[376] 場合によってはそれ以上の制約が必要かもしれません。例えば閲覧文脈が開かれた後、 利用者がそこで Webブラウザーの設定ページを開いたら、 外部のスクリプトからその location.href への値の設定は無視するべきかもしれませんし、 postMessage も (設定ページ内のスクリプトが無視するだけでなく、Webブラウザーレベルで) 完全に無視するべきかもしれません。


[271] 非文書表示は、 navigate 開始以外でも生じることがあります。 例えば、 navigatefetch の途中で RST を受信した場合や、 応答の受信中に接続が閉じられてネットワークエラーとして扱われる場合、 あるいは navigate に限らず Safe Browsing陽性fetch が実行された場合に、 表示中の文書が破棄されて非文書表示に差し替えられることになります。

履歴と素片識別子の処理

ページ遷移が行われなかった場合

[163] 素片識別子への navigate は、次のように行わなければなりません >>12

  1. [506] エントリーを、新しいセッション履歴エントリーに設定します。
    [292] セッション履歴エントリー
    URL
    新しい資源URL
    文書
    navigate する閲覧文脈活性文書
    題名
    未設定
    スクロール復元モード
    navigate する閲覧文脈セッション履歴現在エントリースクロール復元モード
    その他
    新しい資源navigate する閲覧文脈の現在の状態による値
  2. [165] navigate する閲覧文脈セッション履歴エントリー置換有効についてセッション履歴エントリーを挿入します。
  3. [168] エントリー置換有効non-blocking eventsreload-triggered navigation について、 履歴を探索します。
  4. [402] webNavigation API の onReferenceFragmentUpdated を呼び出します。 遷移型遷移修飾子群、現在時刻を引き渡します。 仕様書なし
  5. [409] 新しい資源URL既読化を行います。 仕様書なし
  6. [169] 後片付け (>>109) に移ります。
[164] 素片識別子へのスクロールは、履歴を探索する過程で行われます。

ページ遷移が行われた場合

[95] 閲覧文脈内に何らかの表示を行う場合には、ある程度処理が進んだ段階で、 セッション履歴を新しいページで更新します。

[97] セッション履歴を新しいページで更新 (update the session history with the new page) するには、 次のようにします。 >>12

  1. [572] 旧文書を、 navigate する閲覧文脈セッション履歴現在エントリー文書に設定します。
  2. [571] タスクをキューに追加します。
    処理
    旧文書について、 次に示す処理 (>>99) を実行します。
    文書
    旧文書
    タスクキュー
    ネットワークタスク源

[99] タスクの処理は、 旧文書について、 次のようにします。 navigate引数である navigate する閲覧文脈新しい資源置換有効エントリー更新するエントリーnavigate によって作成された新しい文書を参照します。 また navigatemature フラグを設定します。

  1. [111] 旧文書について unload a document を実行します。 >>12
  2. [127] 取り消しフラグが設定されていれば、
    1. 後片付け (>>109) に移り、こちらはここで終わります。 >>12
  3. [112] エントリー更新するエントリーがあるなら、
    1. エントリー更新するエントリー文書およびそれと同じ文書を参照する他のエントリー文書新しい文書に変更します。 >>12
    2. エントリー更新するエントリーreload-triggered navigation について履歴を探索します。 >>12
  4. [273] 新しい資源URLnavigate する閲覧文脈活性文書URL等しいなら、
    1. [274] 現在エントリーを、新しいセッション履歴エントリーで置換します >>12
      [275] セッション履歴エントリー
      資源
      新しい資源
      文書
      新しい文書
      スクロール復元モード
      auto
      その他
      関係する状態
    2. [476] 現在エントリーreload-triggered navigation について履歴を探索します >>12
  5. [113] そうでないなら、
    1. [233] navigate する閲覧文脈セッション履歴に新しいセッション履歴エントリーを挿入します >>12
      [290] セッション履歴エントリー
      URL
      新しい資源URL
      navigate の引数新しい資源応答
      新しい資源応答 (あれば)
      文書
      新しい文書 >>12
      スクロール復元モード
      auto >>12
      その他
      関係する状態 >>12
    2. [291] 新しいエントリーへ置換有効reload-triggered navigation について履歴を探索します。 >>12
  6. [114] mature フラグを設定します。 >>12
  7. [115] navigate する閲覧文脈入れ子閲覧文脈delaying load events mode フラグが設定されている場合は、 これを削除します。 >>12
  8. [573] 新しい文書について try to scroll to the fragment します。
[107] これは新しい文書レンダリングの開始のタイミングであり、 他のフレームスクリプトから新しい文書にアクセスできるタイミングでもあります (履歴の探索内で、閲覧文脈活性文書が新しいものに設定されます)。 本アルゴリズムは新しい文書自体のスクリプト (あれば) よりも前に実行されます (>>106)。
[187] 新しい資源URL が指定されない時もありますが (window.open)、その場合のセッション履歴エントリーがどうなるかは不明です。 about:blank または Webブラウザー依存のエラーページの URL でしょうか。

[100] 閲覧文脈文書が表示されると、 素片識別子にスクロール、 つまり URL素片viewport に表示されるように適宜スクロールされます。 仕様書では、これは文書について try to scroll to the fragment する処理として記述されています >>12

[101] かつては、長らく、 仕様書上はイベントループのスピンとして記述されていました。 セッション履歴を新しいページで更新自体も素片識別子にスクロールする操作も任意のタイミングで行えるため、 実はスピンを使わない形に等価に置き換えられます。 仕様書スピンにより記述していたのは、 「適切と認められるタイミング」を厳密に表現するためでしょうか。

[574] この処理は、 セッション履歴を新しいページで更新し終わってから、 文書構文解析器stop parsing するまでの間で、 利用者エージェントが適当と認めるタイミングで、 結果が失敗でなくなるまで、 任意の回数実行されます。 文書構文解析器がないとき、何もしません。 >>12

[575] 文書構文解析器がないときとは、 初期about:blank文書のときだけと思われます。

[576] 次のようにします。 >>12

  1. [577] タスクをキューに追加します。
    処理
    1. [578] 利用者エージェントの判断により、ここで停止します。
    2. [579] 結果を、 文書について、 素片識別子にスクロールした結果に設定します。
    3. [580] 結果が失敗の場合、 また改めて時機を見て実行できます (>>574)。
    タスクキュー
    ネットワークタスク源

[89] 結果が失敗でなくなるか、 この処理を実行しないと判断した時点で、 navigate としての処理は完了です >>12。後片付け (>>109) に移ります。

[581] この処理は、 navigate された新しい文書読み込みながら表示する途中に、 素片識別子で示された要素スクロールするためのものです。 Webブラウザー文書の表示が完了するまで待たずにスクロールできます。 素片識別子が参照する要素はいつ出現するかわからないので、 Webブラウザーは適当なタイミングで探し続ける必要があるのです。

[582] また、 素片識別子の参照する要素が見つかってスクロールするより前に、 利用者スクロールバーを操作するなど相反する状態に変化させることがあります。 Webブラウザー利用者の意図を推測し、 素片識別子にスクロールする処理をキャンセルすることが認められているのです。

媒体文書やプラグイン文書の場合

[159] 媒体文書プラグイン文書として表示される場合には、 素片識別子が付いた URLsrc 属性に設定されることになりますから、 その要素の処理の一部として素片識別子が適用されることがあります。

[160] 例えば動画素片識別子t= が指定されていれば、 その位置から再生されます。

[161] 理論上は媒体文書プラグイン文書における文書の示された部分へと素片識別子にスクロールされることになりますが、 実際には媒体文書プラグイン文書に示された部分は存在しないでしょうから、 そちらでは何も起こらないと思われます。

閲覧文脈外の処理

[48] 閲覧文脈に影響せずに新しい資源を処理する場合もあります。

[133] 取り消しされていれば、何もしません。取り消しされていなければ、 次の通り何らかの処理を実行します。

[57] なおfetch (相当) を行う前にこちらの処理方法に移行する場合と、 fetch 結果をこちらの方法で処理する場合があります。 外部アプリケーションを起動する場合、前者なら URL を渡し、 後者なら fetch して得られたデータを渡すことになります。

[29] 例えば fetch 前の時点で URL scheme に対応していないので無視する場合があります >>12

[86] MUA が利用できない状態での mailto: への navigate や、 特権を持たないページからの about:chrome:file: への navigate で何もせずに無視する実装があります。

[87] しかしそのような動作は不親切で好ましくないと思われます。 mailto: へリンクするページは数多ありますが、 クリックしても何も起こらないのは何かが壊れているように見えます。 mailto: などの場合はヘルパーアプリケーション選択のダイアログを出すのが好ましいと思われます。 about: などの場合は非文書表示によりエラーを出すのが好ましいと思われます。 >>174 も参照。

[58] fetch 前の時点で URL外部アプリケーションに引き渡す場合 (例えば mailto: URLMUA に渡す場合 >>12) があります。

[40] 例えば fetch 結果を外部アプリケーションによって処理したり、 未知のMIME型なのでダウンロードとして処理したりします >>12

[56] 多くの Webブラウザーでは、どう処理するか利用者に問い合わせる (非モーダル) ダイアログを表示します。

[61] fetch した Word 文書をワープロアプリケーションに引き渡す場合があります >>12

[324] プラットフォームによっては、 (http: URL も含め) URL schemeURL のパターンに対して処理するアプリケーションを登録できるものがあります。 詳しくは >>90 参照。

[62] 利用者エージェントは、外部アプリケーションに引き渡す場合は、 著者による対象ソフトウェアの悪用を防ぐよう努力するべきです >>12

[63] 例えば、文書起源が当該ソフトウェアを起動することを認められているかを利用者に確認させることができます >>12

[64] 特に、 始点閲覧文脈WindowProxyWindow過渡活性化の場合、 事前の利用者の確認無しで外部ソフトウェアを起動するべきではありません >>12

[67] 外部アプリケーションの実行自体がブラクラとなり得ます。 同じ起源利用者により既に認められた起源であっても、 何度も重ねて起動することは抑制するべきでしょう。 また様々な異なる外部アプリケーションを次々と起動しようとすることも抑制するべきでしょう。
[80] ここでいう外部アプリケーションとは、実装方法によらず、閲覧文脈ダウンロードなど Webブラウザーの機能以外を指すものと思われます。例えば WebブラウザーMUA が統合され同一プロセスで動作する製品があったとしても、 その MUA外部アプリケーションと解釈するべきでしょう。 またダウンロード証明書ダウンロードのような Webブラウザー内の機能も、 ブラクラ化を防ぐなど類似した配慮が必要かもしれません。
[257] 外部アプリケーションを実行してよいかどうかの確認ダイアログの表示も、 ブラクラとなることのないように、 UI の配慮が必要です。

[66] 実行可能ファイルなど、 fetch 完了後の実行には特に注意しなければならない場合もあります。

[331] ダウンロードに移行する場合、navigate 開始元の起源を処理に使います。 これが何なのかは不明瞭ですが、始点文書起源が適切そうです。

[338] ダウンロードの際は、提案ファイル名を引き渡します。

ダウンロードも参照。

[128] いずれにせよ、閲覧文脈外の処理を開始したら、 (その完了を待たずに) navigate としての処理は完了です。その時点で後片付け (>>109) に移ります。

[239] 新しい最上位閲覧文脈の場合で、 navigate の結果が閲覧文脈外となった場合には、 使われない閲覧文脈が残ることになります。 古い Webブラウザーでは空白 (about:blank) のままのタブが表示された状態でしたが、現在の Webブラウザーでは自動的に閉じられるのが普通です。

[240] Chrome では、そのような window.open が返した Window オブジェクトwindow.open 直後時点では初期about:blank文書ですが、 navigate 後には異なる起源にアクセスした時のような (ほとんど何の情報にもアクセスできない) 状態になっているようです (同じ起源への navigate であっても)。
[241] 新しい閲覧文脈が作成されたとしても、それがどの時点で表示されるべきかは、 仕様としては決められていません。理論上は閲覧文脈の選択/閲覧文脈の作成時点ではまだ新しいタブは表示せず、 navigate によりレンダリングの開始となった時点ではじめて表示する (閲覧文脈を使わないなら、一度も表示しない) こともできなくはありません。 ただしその間 (サーバーからの応答を待つため、ネットワークサーバーの状態に依存する時間) 利用者は新しい閲覧文脈を開いた操作が成功しているかどうか不安になるかもしれませんから、 何らかの表示上の配慮が必要かもしれません。

[391] Chrome は新しい URL scheme が完全に未知のものである時、 何もしないようです。

[393] FirefoxFTP への navigateサーバーが予期せぬ返答を返した時、 それをモーダルダイアログで表示します。

[406] 何らかの問題 (セキュリティー制限違反など) が原因で何もしないことを選択した場合は、 webNavigation API の onErrorOccurred を、 エラーの説明の文字列と現在時刻と共に実行します。 仕様書なし

取扱器による処理

[206] 登録済みプロトコル取扱器登録済み内容取扱器で適用可能なものがあれば、 それが使われることがあります。 ただしどの条件で使われるかや、使われる場合にどのような navigate が行われるかの詳細は、 HTML Standard では規定されていません。

[429] URL閲覧文脈に関するnavigate URL schemeの処理は、 次のようにします >>12

  1. [430] URL閲覧文脈外で処理されるなら、そのようにします。
  2. [431] それ以外なら、 URL閲覧文脈非文書表示します。

[432] 取扱器に委ねる場合は、新しい navigate を実行します >>12

[207] 多くの Webブラウザーは、 URL URL の処理方法を次のように決定するようです。

  1. [342] URL がセキュリティー上の制限 (>>174) に抵触するなら、それに従うこととし、 こちらはここで終わります。
  2. [343] 一覧を、空のリストに設定します。
  3. [344] URLWebブラウザーで扱える URL なら、
    1. [346] 一覧に、通常の navigate の継続の選択肢を追加します。
    2. [345] URLschemenetwork scheme なら、
      1. [353] OSプロトコル取扱器のうち、 URL を扱えるものの一覧を取得し、これを一覧に追加します。
  4. [347] それ以外なら、
    1. [348] Webブラウザーに登録されている登録済みプロトコル取扱器OSプロトコル取扱器のうち、 URLscheme を扱えるものの一覧を取得し、これを一覧に追加します。 順序は、実装方法や利用者の設定に依存します。
  5. [349] 一覧が空の場合は、 URL scheme に対応していない旨のエラーを表すエラー文書を閲覧文脈に表示することとし、こちらはここで終わります。
  6. [352] 一覧の項目が1つだけで、それが通常の navigate の継続である場合、 navigate を継続することにし、こちらはここで終わります。
  7. [350] 実装や利用者の設定により既定のプロトコル取扱器を利用する場合は、 一覧の先頭のプロトコル取扱器を使うこととし、こちらはここで終わります。
  8. [351] 一覧を非モーダルなダイアログとして表示することにします。

[354] Windows では、 URL scheme を処理するアプリケーションレジストリーに登録できます。

[355] Android では、アプリが処理する http:https:URL接頭辞を登録できます。

[356] network scheme の場合に OS の処理器を使うのは、 navigate する閲覧文脈入れ子閲覧文脈補助閲覧文脈のとき不適切そうで、 抑制するべきだと思われます。

[209] 多くの Webブラウザーは、 MIME型依存の処理方法を次のように決定するようです。

  1. Webブラウザーが扱える sniffed MIME type なら、通常の navigate を行うこととし、 こちらはここで終わります。
  2. ... や、 OS内容取扱器のうち MIME型応答sniffed MIME type と一致するものの一覧を取得します。順序は、実装方法や利用者の設定に依存します。
  3. 一覧が空の場合は、ダウンロードとして処理することとし、こちらはここで終わります。
  4. 実装や利用者の設定により既定の内容取扱器を利用する場合は、 一覧の先頭の内容取扱器を使うこととし、こちらはここで終わります。
  5. 一覧および「ダウンロード」の選択肢を非モーダルなダイアログとして表示することにします。

[436] 登録済みプロトコル取扱器登録済み内容取扱器は、 新しい資源要求メソッドGET でなければ使えません。 多くのプラットフォーム取扱器も、 GET しか扱えないと思われます。

[208] Chrome では、登録済みプロトコル取扱器への navigate が行われたら、元の文書の番地文書のreferrerになるようです。 Firefox では、文書のreferrerは設定されないようです。

他の fetchnavigate引数が引き継がれるのかどうかは不明です。

取り消し処理

[138] 利用者エージェントは、利用者が (取り消しフラグが設定されていない) navigate取り消し (cancel) する手段を提供しても構いません >>12。 あるいは利用者が他の navigate を開始できるようにしても構いません >>12。 その場合の取り消しの reasonend-user abort と思われます。

[139] navigate は、他の navigatetraverse the history by a delta により取り消しされることもあります。

[539] navigate される過程にあるかどうかは、 document.open で参照されることがあります。

[166] navigate は、文書読み込みを停止により取り消されることがあります。

[123] navigate を取り消す場合は、次のように処理しなければなりません >>12。取り消しは、引数として事由 reason と共に行います。

[137] が、現時点で HTML Standardreason を規定していません。 基本的には end-user abortfatal に当たると思われます。
  1. [124] 取り消しフラグを設定します。
  2. [125] 新しい資源fetch を実行中なら、これを terminate します >>12reason を引き渡します。
  3. [126] 新しい文書があれば、文書のabort を実行します >>12
  4. [405] webNavigation API の onErrorOccurred を、 取り消された旨の説明文字列と現在時刻と共に実行します。 仕様書なし
[136] navigate が取り消しされても、 navigate が呼び出されている unload a document を完了させたり、後片付け (>>109) を実行したりする必要があり、 直ちに navigate 処理が停止されるわけではありません。
[144] navigate の結果ダウンロードに移行した場合、そのダウンロード処理は最早 navigate の一部ではないので、他の navigate から取り消されはしません。

navigate の停止

[109] navigate する閲覧文脈入れ子閲覧文脈delaying load events mode フラグが設定された場合は、 navigate の停止時にこれを削除しなければなりません >>12

完全に実行して終了した場合も、途中で終了した場合や取り消された場合もこれが実行されます。
[110] 複数の navigate が同時に実行されることは (最初のチェック部分を除き) ないはずなので、本フラグを設定する navigate は1つだけのはずですし、 本 navigate が設定していないのに他の navigate が設定していることもないはずです。

[230] HTML構文解析器が動作する場合にせよ、それ以外にせよ、 閲覧文脈内に何かを新たに表示した場合には、最終的に stops parsing が呼び出されています。

[228] embed 要素object 要素から navigate が呼び出された場合、 資源の読み込みが完了したら、要素load イベント発火することになっています。 これは stops parsing の最終段階を表すと思われます。

[400] 文書DOMContentLoadedloadイベントも、 stops parsing 内で発火されます。

進捗表示

[140] navigate が開始してから停止するまでの間、 Webブラウザーは何らかの形で navigate 中であることやその進捗を表示するのが普通です。

busy indicator を参照。

[326] IE は、ページ遷移開始時に OS で設定した効果音を鳴らします。

正確なタイミングがいつなのかはよくわかりません。リンククリックなのか、 その他の navigate でも発生するのか、どんな URL でも (javascript:素片識別子でも) なのか、表示変更が決まった時点なのかよくわかりません。

URL scheme による navigate 制限

[174] 著者が発生させた navigate (スクリプトによるものの他、 利用者ハイパーリンクを辿ることにより発生したものを含みます。) は、その前後の URLURL scheme 等によって制限されることがあります。

[175] 制限される対象となる場合には、何も起こらなかったり、エラーが行内で表示されたりします。

[176] 制限されるのは、 navigate の呼び出し元 (?) の起源が特権を持たない場合で、 新しい資源が特権を持つ場合です。ここでいう特権を持った起源URL とは、例えば

... のようなものをいいます。特権を持つ URL から異なる起源で特権を持つ URL の場合も、認められないかもしれません。

[340] https: から file: へのハイパーリンクは、 悪用される危険性があるため、認められるべきではありません。

[341] ブラウザー拡張のページから他のブラウザー拡張のページへのハイパーリンクは、 好ましくないとして認められないかもしれません。

[373] http: のページにWebブラウザーの設定ページを iframe で埋め込めるのは、不適切でしょう。

[242] file: の取り扱いはセキュリティー上の問題もあるため明確に定めるべきように思われますが、 現時点ではそのような仕様書は存在していないようです。
[243] IEhttp: から res: へのハイパーリンクフレームによる navigate を認めているようです。

[377] 特権を持つ URL から持たない URL への navigate は通常は認められますが、 特別な扱いが必要かもしれません。例えば file: から https: へのリンクは普通認められるべきと考えられますが、 Referer: は送るべきでは無さそうです。

[339] 他にも URL 依存の制約があるかもしれません。 例えば、 javascript: URL著者が指定した閲覧文脈への navigate のみ認められるべきで、利用者が新しい閲覧文脈を開いたり、 他の既存の閲覧文脈を選んだりできるべきではなさそうです。

[495] Chromechrome: URL でのブックマークレット (javascript: URLnavigate するブックマーク) を実行しません。

[374] https:http: を埋め込めないとの制限 (Mixed Content 制約) や、 X-Frame-Options: による埋め込み制約は、本項の制約とはまた異なるものです。

プライバシー

[218] navigate の結果は利用者エージェントOS の実装や利用者の設定に依存することがあります。 これは fingerprinting vector です。 特に媒体文書プラグイン文書エラー文書の違いはスクリプトからも検出しやすいので利用者エージェントの実装者は注意するべきかもしれません。

[219] エラー文書の DOM に詳細なエラー情報を含めてしまうと、 不必要に著者に情報を流出させてしまうことがありますから、注意が必要です。

[220] 例えばネットワークエラーを表すエラー文書で自ホストのネットワークインターフェイスの名前や利用状況などの情報を表示すると利用者に有用かもしれませんが、 DOM を通じて著者が取得できるのは好ましくありません。

歴史

[534] navigate に相当するものは Web の誕生と同時に出現したといえますが、 これが仕様書の形で明文化されたのは、それから十数年が経過した後の HTML5 (現在の HTML Standard) においてでした。

[1] 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. ( ( 版)) http://html5.org/tools/web-apps-tracker?from=5684&to=5685

[2] 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). ( ( 版)) http://html5.org/tools/web-apps-tracker?from=5685&to=5686

[3] [whatwg] pushState and session history issues ( ( 版)) http://lists.whatwg.org/htdig.cgi/whatwg-whatwg.org/2010-November/029234.html

[8] Web Applications 1.0 r6630 Define navigating to video and audio resources ( ( 版)) http://html5.org/tools/web-apps-tracker?from=6629&to=6630

[9] リンクのクリック時に clickimg を使って fetch を行うと、 IE10 ではアクセスが発生しますが、 FirefoxChrome ではアクセスが来ません。 mousedown だと Chrome はアクセスが来ますが、応答を受け取ったり受け取れなかったりするようです。 Chrome の場合 navigation によってアクセスが中断され、そのタイミングによって要求が送られたり送られなかったり、 応答を処理できたりできなかったりするようです。

[10] [whatwg] scrdoc and session history don't play along in the spec ( ( 版)) http://lists.whatwg.org/pipermail/whatwg-whatwg.org/2013-July/040059.html

[11] [whatwg] Avoiding synchronous iframe load ( ( 版)) http://lists.whatwg.org/pipermail/whatwg-whatwg.org/2013-October/041281.html

[4] [whatwg] Navigation and history traversal issues ( ( 版)) http://lists.whatwg.org/pipermail/whatwg-whatwg.org/2012-September/037325.html

[5] Window Object 1.0 ( ( 版)) http://www.w3.org/TR/Window/#dfn-navigate

[6] Web Applications 1.0 r8555 Be more explicit about handing off to external software during navigation. ( ( 版)) http://html5.org/tools/web-apps-tracker?from=8554&to=8555

[7] Web Applications 1.0 r8799 Stop using the word 'asynchronously', and reduce usage of the word 'synchronous'. ( ( 版)) https://html5.org/r/8799

[227] » 想定外のスキームと脆弱性 TECHSCORE BLOG ( 版) http://www.techscore.com/blog/2015/04/25/scheme-security/

[234] URLスキーム・独自ディープリンク実装に代わる、Universal Links(iOS 9で導入)でより良いUXを実現 - Qiita ( 版) https://qiita.com/mono0926/items/2bf651246714f20df626

[488] navigation scope:

[270] Integrate Fetch into HTML · whatwg/html@7c5555a ( 版) https://github.com/whatwg/html/commit/7c5555a16f2920c02244c10756bb2f1a11e87a22

[278] Add 'HTTPS state' to settings objects · whatwg/html@6de5241 ( 版) https://github.com/whatwg/html/commit/6de524157fcf341e10efb3eec634bcf7325e6ee4

[217] Fix #124: make more types follow text/plain navigate logic · whatwg/html@f94f3c4 ( 版) https://github.com/whatwg/html/commit/f94f3c4595fbc5fecb747ef52f46cdc5f2b3feec

[280] Define additional request parameters for navigate · whatwg/html@80f052b ( 版) https://github.com/whatwg/html/commit/80f052b44f3842084221b1104d1fecb02228699a

[281] 338621 – Feed View overrides XSLT stylesheet defined in XML document ( 版) https://bugzilla.mozilla.org/show_bug.cgi?id=338621

[142] Add and populate global object's "CSP list" · whatwg/html@479dfbf ( 版) https://github.com/whatwg/html/commit/479dfbf1ff68b746ed3f81cc7415165e3342709e

[232] Add scroll restoration preference to history traversal · whatwg/html@dd6a34e ( 版) https://github.com/whatwg/html/commit/dd6a34ec3c191ee1968a0fc8d174b4ce3b615916

[299] Remove the storage mutex due to lack of implementation · whatwg/html@1b918cf ( 版) https://github.com/whatwg/html/commit/1b918cf72fcbba011f83b92ab5d1f483fb1cafa3

[300] Rewrite global object initialization to delegate to ES · whatwg/html@cf0355d ( 版) https://github.com/whatwg/html/commit/cf0355d7e0e229b98f7fbd51b8c7608010c787f5

[303] Rewrite script execution on top of ES · whatwg/html@4891d18 ( 版) https://github.com/whatwg/html/commit/4891d18aaf2df1d40aa61f467a5a10cfc19dd85d

[308] Remove <iframe seamless> · whatwg/html@1490eba ( 版) https://github.com/whatwg/html/commit/1490eba4dba5ab476f0981443a86c01acae01311

[309] Remove <iframe seamless> · whatwg/html@1490eba ( 版) https://github.com/whatwg/html/commit/1490eba4dba5ab476f0981443a86c01acae01311

[311] Replace sniffed MIME type with computed MIME type · whatwg/html@2f58d1e ( 版) https://github.com/whatwg/html/commit/2f58d1eb6a5eab442a7d31716c7fed7f8eb3f16f

[322] Align with URL spec's terminology: "fragment identifier" => "fragment" · whatwg/html@472bd07 ( 版) https://github.com/whatwg/html/commit/472bd07726db580b97b9d775996e9d895cda8be0

[323] Define security around Window, WindowProxy, and Location properly · whatwg/html@acae3df ( 版) https://github.com/whatwg/html/commit/acae3df652b382e9f4f1d1b4dc7e08e2b00df821

[325] Remove the origin aliasing concept · whatwg/html@438155d ( 版) https://github.com/whatwg/html/commit/438155d2a2255aa5ea84ae390744d8a8662ebec2

[332] Define the origin of non-initial about:blank documents · whatwg/html@baad9fd ( 版) https://github.com/whatwg/html/commit/baad9fd10e5a49c1c72fc89426ffa2a26e0b72e4

[335] Fix navigation to create a new realm and environment settings object · whatwg/html@862afa4 ( 版) https://github.com/whatwg/html/commit/862afa4d768cb01e9a020e0562bc465e7f8bacfe

[305] Define "server-based naming authority" in terms of URL · whatwg/html@da7b5ba ( 版) https://github.com/whatwg/html/commit/da7b5baf5815754cc40387452ae41e989848032f

[306] Merge effective script origin into origin · whatwg/html@8a843f2 ( 版) https://github.com/whatwg/html/commit/8a843f2169a6864a3024c4329528dccb2051d275

[357] Detail how javascript: return values become response bodies · whatwg/html@9997cd9 ( 版) https://github.com/whatwg/html/commit/9997cd93c65a9f4a640a593c02f01c2c58924457

[358] Editorial: mark up the primary variables in the navigate algorithm · whatwg/html@c08c0a0 ( 版) https://github.com/whatwg/html/commit/c08c0a0d12cf8c4f12dee2593be10eb971e0eb65

[359] Make navigate use "in parallel" · whatwg/html@77b1e02 ( 版) https://github.com/whatwg/html/commit/77b1e021bcb9229c60fc90dc72bbb0e0d1cff7e4

[360] Assign document's origin during creation · whatwg/html@b94d600 ( 版) https://github.com/whatwg/html/commit/b94d600e0e4de5ddea2215078611d6dfd0800391

[361] Navigate cannot use a non-GET-non-POST method ( (annevk著, )) https://github.com/whatwg/html/commit/5c67104e6825ee0fafac1b2dc8892f0d42566649

[371] Editorial: turn "exceptions enabled" into a flag ( (annevk著, )) https://github.com/whatwg/html/commit/879edbfcb25586caec8df93f303a434a700a18bc

[372] Editorial: turn "exceptions enabled" into a flag ( (annevk著, )) https://github.com/whatwg/html/commit/879edbfcb25586caec8df93f303a434a700a18bc

[380] Integrate with the Referrer Policy spec, part 2 of n ( (domenic著, )) https://github.com/whatwg/html/commit/176e74243c649b709b9959b7d08b327290c2f403

[381] Navigate: use URL's equals concept to compare URLs ( (annevk著, )) https://github.com/whatwg/html/commit/f3c2a307658b21dc129ec5b11368e16048238fb8

[388] Block redirects to non-HTTP schemes · Issue #309 · whatwg/fetch ( ()) https://github.com/whatwg/fetch/issues/309

[389] Make navigate's resource handling more explicit ( (annevk著, )) https://github.com/whatwg/html/commit/806bc62caaee78a696a6c929558a5b801cceeec4

[129] Define the document's referrer in terms of Fetch ( (annevk著, )) https://github.com/whatwg/html/commit/148dcd7d8214433b80de92b19d27cc5de128f849

[392] Cleanup "create a new browsing context" ( (annevk著, )) https://github.com/whatwg/html/commit/f139279fb116bbde5d5ee3d257d21778cd774144

[395] [] (0) Placeholder for beforeunload/unload; interaction of document.o… ( (Hixie著, )) https://github.com/whatwg/html/commit/c1994a485446ab0fbfb7048df10bb081947f6405

[396] Chrome incompatibilities - Mozilla | MDN ( ()) https://developer.mozilla.org/en-US/Add-ons/WebExtensions/Chrome_incompatibilities

In Firefox, you can't open (using tabs.create), or navigate to (using tabs.update) privileged URLs:

chrome: URLs

javascript: URLs

data: URLs

privileged about: URLs (for example, about:config, about:addons, about:debugging)

[397] Chrome incompatibilities - Mozilla | MDN ( ()) https://developer.mozilla.org/en-US/Add-ons/WebExtensions/Chrome_incompatibilities

webNavigation

Firefox does not support:

onCreatedNavigationTarget

onTabReplaced

Filtering

transition types and qualifiers until Firefox 48

In Firefox, before Firefox 47,  onReferenceFragmentUpdated also triggers for pushState.

[418] Define initial about:blank document better ( (annevk著, )) https://github.com/whatwg/html/commit/8edc92d6e42878662c7f9f75a43352bd341ae01d

[419] Use fullscreen logic for initial about:blank documents too ( (annevk著, )) https://github.com/whatwg/html/commit/c2a8d605e0115c80d1ccb4b15371ecaa56a33e30

[252] Plz Navigate: moving the navigation logic to the browser process - Google グループ () https://groups.google.com/a/chromium.org/forum/#!topic/chromium-dev/sOs05JfmPFw

[420] Issue 368813 - chromium - [META]: Navigation network requests should be made by the browser process (aka PlzNavigate) - Monorail () https://bugs.chromium.org/p/chromium/issues/detail?id=368813

[421] Navigate: remove "gone async" and define redirect handling (annevk著, ) https://github.com/whatwg/html/commit/8b630f5e4fa2ec8b0999470d09490bffe6e9a1e3

[433] Navigate: narrow down requirements for fragment handling (annevk著, ) https://github.com/whatwg/html/commit/10379142cbb138a814d94e24f3e6b14c2439d614

[437] 【Swift】WKWebViewのリダイレクト先URL(URLスキーム)に応じて動作したい時にハマったこと - Qiita () https://qiita.com/seiya_orz/items/0ed195b79953ec607ea1

didReceiveServerRedirectForProvisionalNavigationはデフォルトでは、http~とhttps~のみをリダイレクト対象として呼び出されるようでした。どのURLをリダイレクトとして扱うかのハンドリングをしている関数が、func webView(webView: WKWebView, decidePolicyForNavigationAction navigationAction: WKNavigationAction, decisionHandler: (WKNavigationActionPolicy) -> Void)です。

[438] Add another navigation hook for 'form-action'. (mikewest著, ) https://github.com/w3c/webappsec-csp/commit/ad8c11702561db911baab316659de28de1cb00d0

[439] Upstream navigation hooks from CSP (mikewest著, ) https://github.com/whatwg/html/commit/2083b0053a059f692a0a95547ba9b6bd0c511094

[447] Treat 'data:' documents as unique, opaque origins (#1756) (mikewest著, ) https://github.com/whatwg/html/commit/00769464e80149368672b894b50881134da4602f

[449] Disallow *all* navigations during unload, not just cross-origin (domenic著, ) https://github.com/whatwg/html/commit/2a11eef8f92b0335328890dc2cb1e281d18553eb

[459] navigation: refactor waiting for navigation and response checks (andreastt著, ) https://github.com/w3c/webdriver/commit/321fff4e12d80a745828f7c711fdc18932cca244

[460] Improve navigate for service worker hooks (jungkees著, ) https://github.com/whatwg/html/commit/2b93f9ec35b152e58d3e181bea8c45d789bac949

[470] Add environment's execution ready flag (jungkees著, ) https://github.com/whatwg/html/commit/d358c7814de8a053dcb8615a5d87e8c2e0e19257

[472] Handle navigation to `javascript:` URLs as inline script. (#142) (@bzbarsky著, ) https://github.com/w3c/webappsec-csp/commit/479bf6c6e891db0bb1cd7f71be764f3aff6a1a33

[473] Apply CSP to javascript URLs in navigate (mikewest著, ) https://github.com/whatwg/html/commit/9daeebfbdd068357257fcb69486d47a893c36f63

[474] Editorial: Fix markup in “Initializing a new Document object” (sideshowbarker著, ) https://github.com/whatwg/html/commit/0495be19cdfebf34fd3b95786c271319db0ceed6

[475] Fetch: remove omit-Origin-header flag (annevk著, ) https://github.com/whatwg/html/commit/1d3dd5da311ce51eeaac027cb053cf482476099a

[272] Make same-URL-navigation replace the current entry (annevk著, ) https://github.com/whatwg/html/commit/4f3061ec9a2c3bd868c73edebd14ab751f8f29ea

[479] Web ビュー (Jwmsft著, ) https://msdn.microsoft.com/ja-jp/windows/uwp/controls-and-patterns/web-view

これらの第 1 レベルのサブフォルダーは、他の第 1 レベルのサブフォルダー内のコンテンツから分離されます。 たとえば「ms-appdata:///temp/folder1/file.html」に移動はできますが、そのファイル内のリンクに「ms-appdata:///temp/folder2/file.html」は指定できません。 ただし、ms-appx-web スキームを使ってアプリ パッケージの HTML コンテンツにリンクしたり、http または https の URI スキームを使って Web コンテンツにリンクしたりはできます。

[480] Web ビュー (Jwmsft著, ) https://msdn.microsoft.com/ja-jp/windows/uwp/controls-and-patterns/web-view

Web ビュー コントロールでは、ナビゲーションやコンテンツの読み込みの状態に対する処理に使うことができるイベントがいくつか用意されています。 ルートとなる Web ビューコンテンツについて、イベントは次の順番で発生します。NavigationStarting、ContentLoading、DOMContentLoaded、NavigationCompleted

NavigationStarting - Web ビューが新しいコンテンツに移動する前に発生します。 WebViewNavigationStartingEventArgs.Cancel プロパティを "true" に設定することで、このイベントのハンドラーで移動をキャンセルできます。

[481] Web ビュー (Jwmsft著, ) https://msdn.microsoft.com/ja-jp/windows/uwp/controls-and-patterns/web-view

NavigationCompleted - Web ビューが現在のコンテンツの読み込みを完了したとき、またはナビゲーションに失敗したときに発生します。 ナビゲーションが失敗したかを判断するには、WebViewNavigationCompletedEventArgs の IsSuccess プロパティと WebErrorStatus プロパティを確認します。

[482] Web ビュー (Jwmsft著, ) https://msdn.microsoft.com/ja-jp/windows/uwp/controls-and-patterns/web-view

Web ビュー コントロールは、任意のファイルの種類をホストすることができません。 Web ビューがホストできないコンテンツを読み込もうすると、UnviewableContentIdentified イベントが発生します。 このイベントを処理してユーザーに通知することも、Launcher クラスを使ってファイルを外部のブラウザーまたは別のアプリにリダイレクトすることもできます。

同様に、fbconnect:// や mailto:// といったサポートされていない URI スキームが Web コンテンツで呼び出されると、UnsupportedUriSchemeIdentified イベントが発生します。 既定のシステム起動プログラムに URI を起動させるのではなく、このイベントを処理してカスタム動作を定義してもよいでしょう。

[483] Snapshot allowpaymentrequest and allowusermedia attributes (zcorpan著, ) https://github.com/whatwg/html/commit/b3224a8457e32015153ed91f26b6212e25df1d6b

[485] Merge pull request #62 from w3c/user-abort (igrigorik著, ) https://github.com/w3c/navigation-timing/commit/17567f5ef7c1ab79795365e33a86c52716fbcbf4

[494] Do not always set the recursive flag in HTTP-redirect fetch (annevk著, ) https://github.com/whatwg/fetch/commit/869ec2c2224200988bbc604f7f5181b6bb9df2c3

[496] Call out issues with source browsing context more explicitly (annevk著, ) https://github.com/whatwg/html/commit/a559e721760817dbaffd7e19856993e8b5a20e3b

[497] Make window.open() throw for URL parser failures (annevk著, ) https://github.com/whatwg/html/commit/ea52bf4d50cfb4ef88489bff76276b660b40781b

[498] Navigate improvements · Issue #1352 · whatwg/html () https://github.com/whatwg/html/issues/1352

[499] Avoid using same variable for different purposes (annevk著, ) https://github.com/whatwg/html/commit/0dab3b81edcfb029f4c60dc55b53c2b848d9553f

[500] Editorial: cleanup close a browsing context and prompt to unload (annevk著, ) https://github.com/whatwg/html/commit/b714a7bc124bf0e8828b2adc2aa0b672d96a1dbd

[501] Centralize setting the active document (annevk著, ) https://github.com/whatwg/html/commit/4257a9bf03f8ebbd6cc8b41933b6c5b619611662

[465] Only wait for navigation to complete if it can. (shs96c著, ) https://github.com/w3c/webdriver/commit/79aa7b3e5caff716d42f1474096efe40348a08e3

[466] Deprecations and Removals in Chrome 60  |  Web  |  Google Developers () https://developers.google.com/web/updates/2017/06/chrome-60-deprecations

[467] 684011 - Remove: Top frame navigations to data URLs - chromium - Monorail () https://bugs.chromium.org/p/chromium/issues/detail?id=684011&desc=2

[468] スマホで見ているWebページを瞬時にPCで開くWindowsの新機能を試してみた - PC Watch (株式会社インプレス著, ) http://pc.watch.impress.co.jp/docs/news/1072892.html

[469] Fix mismatched variable names in 'process a navigate fetch' (jyasskin著, ) https://github.com/whatwg/html/commit/f63cc2cd461e5902c305c060bad6e937987af81e

[471] Fix mismatched variable names in 'process a navigate fetch' by jyasskin · Pull Request #2868 · whatwg/html () https://github.com/whatwg/html/pull/2868

[502] Fix some variable usage in navigate (annevk著, ) https://github.com/whatwg/html/commit/fcf344c28e1d6e39ef35dc9940eabc72867bac1b

[503] Fix some variable usage in navigate by annevk · Pull Request #2864 · whatwg/html () https://github.com/whatwg/html/pull/2864

[504] 122022 - (file://) [ISSUE] file:// URLs in a http | https page do not work (clicking does nothing, do not auto-load, etc.) [dupe to bug 84128] ( ()) https://bugzilla.mozilla.org/show_bug.cgi?id=122022

[505] Fragment navigation should use replacement enabled (annevk著, ) https://github.com/whatwg/html/commit/cf02423dc52686d084a3191833d939919b5907fd

[507] Bug in hash change algorithm with replace flag · Issue #2796 · whatwg/html () https://github.com/whatwg/html/issues/2796

[508] Fragment navigation should use replacement enabled by annevk · Pull Request #2869 · whatwg/html () https://github.com/whatwg/html/pull/2869

[509] Define the HTTP Refresh header (annevk著, ) https://github.com/whatwg/html/commit/7e9f6b6ffe2119f43f909f71773a25a7e8a61ca7

[513] Clarify that Link header processing only happens after the Document i… (yoavweiss著, ) https://github.com/w3c/preload/commit/609ecfa8cdb9cc582a11f87eff290e69e76b3346

[514] How do we fetch resources specified in `Link` headers? · Issue #101 · w3c/preload () https://github.com/w3c/preload/issues/101

[515] Remove registerContentHandler() and several friends (annevk著, ) https://github.com/whatwg/html/commit/b143dbc2d16f3473fcadee377d838070718549d3

[516] 744499 - Consider downloading `ftp://` resources rather than rendering them. - chromium - Monorail () https://bugs.chromium.org/p/chromium/issues/detail?id=744499

[517] Incorrect indentation of the navigation check algorithm. (mikewest著, ) https://github.com/w3c/webappsec-csp/commit/98bea96e4d55fcd98d8648cef16416a462516cc1

[518] Clarify navigation behavior for 'script-src'. (mikewest著, ) https://github.com/w3c/webappsec-csp/commit/7a4577c7975c8afdac0c0fc5a5493059b5660742

[519] interface: use Web IDL's new-ish interface mixins concept (#1176) (romandev著, ) https://github.com/w3c/webdriver/commit/d50bdf0c0d6cac5e54cdedc263df3cc2cba173f9

[520] Introduce reload-navigation flag by yutakahirano · Pull Request #685 · whatwg/fetch () https://github.com/whatwg/fetch/pull/685

[521] Set request's reload-navigation flag when the navigation is reload-trigerred by yutakahirano · Pull Request #3592 · whatwg/html () https://github.com/whatwg/html/pull/3592

[522] Proposal: FetchEvent.navigationLoadType · Issue #1167 · w3c/ServiceWorker () https://github.com/w3c/ServiceWorker/issues/1167

[523] Ignore a URL with an unsupported scheme (#447) (tomoyukilabs著, ) https://github.com/w3c/presentation-api/commit/fcb49fd5c7bcc1e0809b04037ea11be4d649cb55

[524] Multiple presentation URLs including non-http/https URL · Issue #446 · w3c/presentation-api () https://github.com/w3c/presentation-api/issues/446

[525] Ignore a URL with an unsupported scheme by tomoyukilabs · Pull Request #447 · w3c/presentation-api () https://github.com/w3c/presentation-api/pull/447

[526] Add "environment discarding steps" hook (mattto著, ) https://github.com/whatwg/html/commit/9592eb5e25acde62b8832ca5fd47d87805a2acbc

[528] Discard the environment after a failed navigation or worker start. by mattto · Pull Request #3723 · whatwg/html () https://github.com/whatwg/html/pull/3723

[529] Set request's history-navigation flag for history traversal (yutakahirano著, ) https://github.com/whatwg/html/commit/437ae8e13bd1b27b951567905e192f78924819d5

[530] Proposal: FetchEvent.navigationLoadType · Issue #1167 · w3c/ServiceWorker () https://github.com/w3c/ServiceWorker/issues/1167

[531] Set request's history-navigation flag for history traversal by yutakahirano · Pull Request #3674 · whatwg/html () https://github.com/whatwg/html/pull/3674

[532] Integrate Feature Policy concepts into HTML (clelland著, ) https://github.com/whatwg/html/commit/78741b7b5471ba213c68a22caff1a53c56d35ce8

[533] Integrate Feature Policy concepts into HTML by clelland · Pull Request #3287 · whatwg/html () https://github.com/whatwg/html/pull/3287

[535] Fix calls to InitializeHostDefinedRealm (TimothyGu著, ) https://github.com/whatwg/html/commit/39c948ba5ec55677e209bc4fc631636f1e8e2baf

[536] document.open() simplifications, part 1 (TimothyGu著, ) https://github.com/whatwg/html/commit/6f769b8089a843066aa19f5991405bf4c84458b3

[537] Editorial: use "isomorphic decode" for Refresh header steps (irrationalRock著, ) https://github.com/whatwg/html/commit/bef6f783084cdb6e591f2a9d8c731180413e8ef2

[538] Remove overridden reload concept (TimothyGu著, ) https://github.com/whatwg/html/commit/6440ccae7340ea41d3eb5bf8ff0b3b27363eda85

[180] Rename target client id to replaces client id (jungkees著, ) https://github.com/whatwg/html/commit/951f9b0d62a5186adcdf0d7a37f4586508fbe17b

[540] document.open(): only abort when there is a navigation (TimothyGu著, ) https://github.com/whatwg/html/commit/1ca520a308ffd6a3c5f7fc26a67338c145af8376

[541] document.open(): only abort when there is a navigation by TimothyGu · Pull Request #3999 · whatwg/html () https://github.com/whatwg/html/pull/3999

[542] Fixed navigation checks running on URL instead of current URL (#347) (andypaicu著, ) https://github.com/w3c/webappsec-csp/commit/91a0f8361c75635babbedc295f88b9403ece468c

[543] Fixed navigations running on URL instead of current URL by andypaicu · Pull Request #347 · w3c/webappsec-csp () https://github.com/w3c/webappsec-csp/pull/347

[544] `navigation request’s URL` is unclear · Issue #343 · w3c/webappsec-csp () https://github.com/w3c/webappsec-csp/issues/343

[545] Modify initialize document's CSP list to match changes in CSP (andypaicu著, ) https://github.com/whatwg/html/commit/513431013267647999f0438b4a8f73031ba3da2e

[546] Initialize document CSP in html needs to be updated · Issue #364 · w3c/webappsec-csp () https://github.com/w3c/webappsec-csp/issues/364

[547] Modified initialized document's CSP to match changes in CSP spec by andypaicu · Pull Request #4190 · whatwg/html () https://github.com/whatwg/html/pull/4190

[548] Handle a null request in init document csp algorithm (#372) (andypaicu著, ) https://github.com/w3c/webappsec-csp/commit/b294bec3b1cb4d48feb616a80cc988dff9b6da83

[549] Handle a null request in init document csp algorithm by andypaicu · Pull Request #372 · w3c/webappsec-csp () https://github.com/w3c/webappsec-csp/pull/372

[550] Initialize document CSP in html needs to be updated · Issue #364 · w3c/webappsec-csp () https://github.com/w3c/webappsec-csp/issues/364

[551] Consider downloading rather than rendering resources delivered over FTP. · Issue #4178 · whatwg/html () https://github.com/whatwg/html/issues/4178

[552] Specify a navigated-to new document's URL (jyasskin著, ) https://github.com/whatwg/html/commit/f2c7ea37eed6346affa6f8d336eb63173e39ac45

[182] Setting the document's address doesn't seem to be correct · Issue #3953 · whatwg/html () https://github.com/whatwg/html/issues/3953

[557] Consider not special casing document's address handling when loading javascript: · Issue #1565 · whatwg/html () https://github.com/whatwg/html/issues/1565

[558] Specify a new document's URL by jyasskin · Pull Request #4205 · whatwg/html () https://github.com/whatwg/html/pull/4205

[559] Remove XML loading's namespace-based dispatching (annevk著, ) https://github.com/whatwg/html/commit/38cac772c17218cb01ef92e8a8f5aec2c386b127

[561] Does any browser still implement namespace-based dispatching? · Issue #2656 · whatwg/html () https://github.com/whatwg/html/issues/2656

[562] Remove XML loading's namespace-based dispatching by annevk · Pull Request #4384 · whatwg/html () https://github.com/whatwg/html/pull/4384

[563] Editorial: initialize feature policy before document creation (dtapuska著, ) https://github.com/whatwg/html/commit/2a397f6a8fce75855fa84785b3b952f9e6fce2d9

[565] Expose new algorithms to create a Feature Policy before document is c… by dtapuska · Pull Request #324 · w3c/webappsec-feature-policy () https://github.com/w3c/webappsec-feature-policy/pull/324

[566] Use the newly exposed methods to initialize feature policy. by dtapuska · Pull Request #4772 · whatwg/html () https://github.com/whatwg/html/pull/4772

[570] Make fragment loop not depend on spin the event loop (annevk著, ) https://github.com/whatwg/html/commit/e62a7be6f3161993b82e9d8469ba2e64a3c6a2a6

[583] Make fragment loop not depend on spin the event loop (annevk著, ) https://github.com/whatwg/html/commit/e62a7be6f3161993b82e9d8469ba2e64a3c6a2a6

[584] Make fragment loop not depend on spin the event loop by annevk · Pull Request #4440 · whatwg/html () https://github.com/whatwg/html/pull/4440

[587] Editorial: factor out and clean up javascript: URL processing (domenic著, ) https://github.com/whatwg/html/commit/e13762fb626dfd64e7639b79cb61a766d66bd72f

[588] Editorial: factor out and clean up javascript: URL processing by domenic · Pull Request #4396 · whatwg/html () https://github.com/whatwg/html/pull/4396

[589] Fix document URL setting for javascript: URLs (TimothyGu著, ) https://github.com/whatwg/html/commit/06aa2d682b731e5ebc72169c63744e8608418dd8

[590] Fix document URL setting for javascript: URLs by TimothyGu · Pull Request #4698 · whatwg/html () https://github.com/whatwg/html/pull/4698

[592] Editorial: move navigation document initialization (domenic, , ) https://github.com/whatwg/html/commit/91902bd54391f4eb71547e33d14e4bc552040b1c

[594] Move stuff out of the middle of "process a navigate response" · Issue #3327 · whatwg/html () https://github.com/whatwg/html/issues/3327

[595] Editorial: move navigation document initialization by domenic · Pull Request #4397 · whatwg/html () https://github.com/whatwg/html/pull/4397

[596] Refactor the navigation algorithm (dtapuska, , ) https://github.com/whatwg/html/commit/061e782437c6cff600f18bc96c1a11489e09c3ab

[103] Refactor navigation algorithm. by dtapuska · Pull Request #4664 · whatwg/html () https://github.com/whatwg/html/pull/4664

[119] Snapshot sandbox at the start of navigation (clelland, , ) https://github.com/whatwg/html/commit/eb13fece2cadc45863dc61079358b72478756f8b

[247] Snapshot sandbox at start of navigation. by clelland · Pull Request #5098 · whatwg/html () https://github.com/whatwg/html/pull/5098

[255] Editorial: nested browsing context is a member, not a type (annevk, , ) https://github.com/whatwg/html/commit/6b737bbc428facf34ec3728c0912cf9e172d0ea4

[256] Revamp the user activation model (mustaqahmed, , ) https://github.com/whatwg/html/commit/8f8c1f50158736b3cf16188377a0974a20367c8b

[259] Make "triggered by user activation" match browser behavior · Issue #1903 · whatwg/html () https://github.com/whatwg/html/issues/1903

[261] Chapter 35 -- Adding Additional Protocols to HotJava, , https://web.archive.org/web/20020430221538/http://docs.rinet.ru:8083/JSol/ch35.htm

[262] >>261 whois: の実装例

[260] A Browser Front End For CORBA Objects - 1127.pdf, , http://www10.org/cdrom/posters/1127.pdf

iiopname: ページを表示できるように拡張した HotJava