モジュールスクリプトの子孫をfetchして実現値化

スクリプトのfetch

[121] script 要素ワーカーの処理では、 外部スクリプトfetch を行うことがあります。

[122] スクリプトの種類によって処理はかなり違っています。

仕様書

古典スクリプト

古典 script 要素

[12] 古典スクリプトのfetch (fetch a classic script) >>4 は、 次の引数を受け取ります。

URL
URL
CORS設定
CORS設定群属性の指示。
設定群オブジェクト
環境設定群オブジェクト
文字符号化
文字符号化
オプション群
スクリプトfetchオプション群
fetchの実行
fetchの実行
続きの処理
処理。

[124] 古典スクリプトの場合、歴史的理由により、文字コードを指定できます (<script charset>)。 (他の種類のスクリプトでは UTF-8 に固定されています。)

[13] 次のようにします >>4

  1. [14] 要求を、潜在的CORS要求の作成の結果に設定します。
    URL
    URL
    CORS設定
    CORS設定
    終点
    script
  2. [345] 要求クライアントを、設定群オブジェクトに設定します。
  3. [344] 要求オプション群について古典スクリプト要求を設定します。
  4. [17] fetchの実行をします。
    要求
    要求
    最上位
    続きの処理
    >>18

[18] fetchの実行の結果を受けて、fetchの応答を次のようにします >>4

  1. [102] 応答を、fetchの応答非安全応答に設定します。
  2. [19] 応答error か、 応答状態OK状態以外なら、
    1. [21] スクリプトを、 null に設定します。
  3. [22] それ以外の場合、
    1. [23] 応答内容型メタデータnull 以外で、 応答内容型メタデータ文字符号化null 以外の場合、
      1. [27] 文字符号化を、応答内容型メタデータ文字符号化に設定します。
    2. [28] ソーステキストを、復号の結果に設定します。
      符号化
      文字符号化
      ストリーム
      応答本体
    3. [31] エラーミュートフラグを、応答CORS交差起源かどうかに設定します。
    4. [29] スクリプトを、古典スクリプトを作成した結果に設定します。
      ソーステキスト
      ソーステキスト
      設定群オブジェクト
      設定群オブジェクト
      基底URL
      応答URL
      エラーミュートフラグ
      エラーミュートフラグ
      オプション群
      オプション群
  4. [20] スクリプトについて続きの処理を実行します。

[34] ソーステキスト復号に使う文字コードは、

  1. BOM
    • 復号操作内で検査される
  2. Content-Type ヘッダーcharset 引数で指定された値
  3. <script charset> で指定された値
  4. 文書の文字符号化

... の優先順で決まります。

[94] この手続きは、旧来の script 要素の処理から呼び出されます。

古典ワーカースクリプト

[6] 古典ワーカースクリプトのfetch (fetch a classic worker script) >>4 は、次の引数を受け取ります。

URL
URL
fetchクライアント設定群オブジェクト
環境設定群オブジェクト
スクリプト設定群オブジェクト
環境設定群オブジェクト
終点
要求終点ワーカーの種別を表します。
fetchの実行
fetchの実行
続きの処理
処理。

[7] 次のようにします。

  1. [54] 要求を、新しい要求に設定します。
    要求
    URL
    URL
    クライアント
    fetchクライアント設定群オブジェクト
    script
    終点
    終点
    同期フラグ
    設定する
    モード
    same-origin
    credentialsモード
    same-origin
    URL credentials利用フラグ
    設定する
    構文解析器メタデータ
    not-parser-inserted
  2. [107] 要求についてfetchの実行をします。
    最上位
    続きの処理
    >>56

[56] fetch の結果を受けて、fetchの応答を次のように処理します。

  1. [103] 応答を、fetchの応答非安全応答に設定します。
  2. [5] 応答error であるか、 応答状態OK状態以外なら、
    1. [8] スクリプトを、 null に設定します。
  3. [9] それ以外なら、
    1. [63] スクリプトを、古典スクリプトを作成した結果に設定します。
      ソーステキスト
      応答本体UTF-8復号した結果
      設定群オブジェクト
      スクリプト設定群オブジェクト
      基底URL
      応答URL
      オプション群
      既定古典スクリプトfetchオプション群
  4. [10] スクリプトについて続きの処理を実行します。

[35] 通常のスクリプトの場合 (>>18) と違って、文字符号化UTF-8 に固定されています。

[95] この手続きは、ワーカーを走らせる処理 (専用ワーカー共有ワーカー) と更新 (サービスワーカー) から呼び出されます。

古典ワーカー輸入スクリプト

[115] 古典ワーカーで輸入されたスクリプトをfetch (fetch a classic worker-imported script) >>4 は、次の引数を受け取ります。

URL
URL記録
設定群オブジェクト
環境設定群オブジェクト

[118] 次のようにします >>4

  1. [123] 要求を、要求に設定します。
    要求
    URL
    URL
    クライアント
    設定群オブジェクト
    script
    終点
    script
    構文解析器メタデータ
    not parser-inserted
    同期フラグ
    設定する
    credentials mode
    include
    URL credentials利用フラグ
    設定する
  2. [130] 要求についてfetchの実行をします。 最上位フラグを設定します。続きの処理は、 >>135 とします。
  3. [147] >>135 の処理の完了を待ちます。完了したら、その結果に従い、 値を返すか例外投げます。

[135] fetchの実行の結果を踏まえて、fetchの応答について次のようにします。

  1. [139] 応答を、fetchの応答非安全応答に設定します。
  2. [144] 応答error応答状態OK状態以外応答ヘッダーリストextract a MIME type を適用した結果が JavaScript MIME型ない、 のいずれかの場合、
    1. [143] NetworkError DOMException投げ、ここで停止します。
  3. [145] スクリプトを、古典スクリプトを作成した結果に設定します。
    ソーステキスト
    応答本体UTF-8復号した結果
    設定群オブジェクト
    設定群オブジェクト
    エラーミュートフラグ
    応答CORS-cross-origin か否か
    基底URL
    応答URL
    オプション群
    既定古典スクリプトfetchオプション群
  4. [146] スクリプトを返します。

[114] importScripts から呼び出されます。 この場合のみ、他の fetch とは異なり、同期的fetch を待ちます。

モジュールスクリプト

[151] モジュールスクリプトの場合、直接指定されたモジュールスクリプトに加えて、 import で直接または間接に参照されているモジュールスクリプトfetch します。ただし、重複読み込みは実行環境ごとに記録されていて、 (今回のスクリプトのfetchに限らず) fetch 済みなら、飛ばされます。 他で既に fetch 中なら、それが完了するのを待ちます。 すべての fetch が完了したら、次の処理へと進めます。

[162] この状態管理を行うため、また Webブラウザーの処理と JavaScriptエンジンの処理が絡み合うため、 更には ServiceWorker で特殊な処理を挟むため、 モジュールスクリプトの読み込み処理はかなり複雑になっています。

モジュール script 要素

[36] モジュールスクリプトグラフのfetch (fetch a module script graph) >>4 は、次の引数を受け取ります。

URL
URL
終点
要求終点
設定群オブジェクト
環境設定群オブジェクト
オプション群
スクリプトfetchオプション群
fetchの実行
fetchの実行
続きの処理
処理。

[104] 次のようにします >>4

  1. [338] 既訪集合を、新しい空集合に設定します。
  2. [339] 既訪集合に、URL を追加します。
  3. [30] 内部モジュールスクリプトグラフfetch手続きを実行します。
    URL
    URL
    終点
    終点
    オプション群
    オプション群
    fetchクライアント設定群オブジェクト
    設定群オブジェクト
    モジュール写像クライアント設定群オブジェクト
    設定群オブジェクト
    既訪集合
    既訪集合
    参照元
    client
    最上位モジュールfetchフラグ
    fetchの実行
    fetchの実行
    続きの処理
    続きの処理

モジュールワーカースクリプト

[33] モジュールワーカースクリプトグラフのfetch (fetch a module worker script graph) >>4 は、次の引数を受け取ります。

URL
URL
credentialsモード
credentialsモードの値。
終点
要求終点
fetchクライアント設定群オブジェクト
環境設定群オブジェクト
モジュール写像設定群オブジェクト
環境設定群オブジェクト
fetchの実行
fetchの実行
続きの処理
処理。

[105] 次のようにします >>4

  1. [336] 既訪集合を、新しい空集合に設定します。
  2. [337] 既訪集合に、URL を追加します。
  3. [108] 内部モジュールスクリプトグラフfetch手続きを実行します。
    URL
    URL
    終点
    終点
    オプション群
    新しいスクリプトfetchオプション群
    [15] スクリプトfetchオプション群
    暗号学的nonce
    空文字列
    一貫性メタデータ
    空文字列
    構文解析器メタデータ
    not-parser-inserted
    credentialsモード
    credentialsモード
    fetchクライアント設定群オブジェクト
    fetchクライアント設定群オブジェクト
    モジュール写像クライアント設定群オブジェクト
    モジュール写像設定群オブジェクト
    既訪集合
    既訪集合
    参照元
    client
    最上位モジュールfetchフラグ
    fetchの実行
    fetchの実行
    続きの処理
    続きの処理

[32] モジュールワーカースクリプトグラフのfetchは、ワーカーを走らせる処理 (専用ワーカー共有ワーカー) と更新 (サービスワーカー) から呼び出されます。

輸入モジュールスクリプト

[148] モジュールスクリプト内の import は、 モジュールスクリプトの子孫のfetchにより処理されます。

モジュールスクリプト共通処理

[262] 内部モジュールスクリプトグラフfetch手続き (internal module script graph fetching procedure) は、 次のようにします。 >>164

引数として、次のものを受け取ります。 URL, fetchクライアント設定群オブジェクト, 終点, オプション群, モジュール写像設定群オブジェクト, 既訪集合, 参照子, 最上位モジュールfetchフラグ, fetchの実行, 続きの処理

  1. [263] 単一モジュールスクリプトのfetchを実行します。 URL, fetchクライアント設定群オブジェクト, 終点, オプション群, モジュール写像設定群オブジェクト, 参照子, 最上位モジュールfetchフラグ, fetchの実行を引き渡します。 続きの処理は、 >>264 とします。

[264] その続きの処理は、結果について、次のようにします >>164

  1. [265] 結果null の場合、
    1. [266] 結果について、続きの処理を実行します。
  2. [267] それ以外の場合、
    1. [268] 最上位モジュールfetchフラグが設定されている場合、
      1. [269] fetchクライアント設定群結果既訪集合について、 モジュールスクリプトの子孫のfetchと実現値化を実行します。 続きの処理を引き渡します。
    2. [270] それ以外の場合、
      1. [271] 結果既訪集合について、 モジュールスクリプトの子孫のfetchを実行します。 続きの処理を引き渡します。

[273] 単一モジュールスクリプトのfetch (fetch a single module script) は、 次のようにします。 >>164

引数として、次のものを受け取ります。 URL, fetchクライアント設定群オブジェクト, 終点, オプション群, モジュール写像設定群オブジェクト, 参照子, 最上位モジュールfetchフラグ, fetchの実行, 続きの処理

  1. [274] モジュール写像を、モジュール写像設定群オブジェクトモジュール写像に設定します。
  2. [276] モジュール写像 [ URL ] が存在する場合、
    1. [275] モジュール写像 [ URL ] が fetching の場合、
      1. [292] モジュール写像 [ URL ] に、 続きの処理を追加します。
    2. [291] それ以外の場合、
      1. [277] モジュール写像 [ URL ] について、続きの処理を実行します。
  3. [278] それ以外の場合、
    1. [279] モジュール写像 [ URL ] を、 fetching に設定します。
    2. [280] 要求を、新しい要求に設定します。
      [281] 要求
      URL
      URL
      終点
      終点
      モード
      cors
      参照子
      参照子
      クライアント
      fetchクライアント設定群オブジェクト
    3. [346] 要求オプション群についてモジュールスクリプト要求を設定します。
    4. [282] fetchの実行をします。
      要求
      要求
      最上位であるフラグ
      最上位モジュールfetchフラグ
      続きの処理
      >>283

[283] その続きの処理は、応答について、次のようにします。 >>164

  1. [284] 応答error応答状態OK状態ない応答ヘッダーリストについてextract a MIME typeして引数を無視すると JavaScript MIME型ならない、のいずれかの場合、
    1. [285] null について、続きの処理を実行します。
  2. [286] それ以外の場合、
    1. [287] ソーステキストを、応答本体UTF-8復号した結果に設定します。
    2. [288] モジュールスクリプトを、 モジュールスクリプトの作成の結果に設定します。
      ソース
      ソーステキスト
      環境設定群オブジェクト
      モジュール写像設定群オブジェクト
      スクリプト基底URL
      応答URL
      オプション群
      オプション群
    3. [293] モジュール写像 [ URL ] の各処理について、
      1. [294] タスクをキューに追加します。
        処理
        1. [295] モジュールスクリプトについて、処理を実行します。
        タスク源
        ネットワークタスク源
    4. [289] モジュール写像 [ URL ] を、モジュールスクリプトに設定します。
    5. [290] モジュールスクリプトについて、続きの処理を実行します。

[296] モジュールスクリプトの子孫のfetch (fetch the descendants of a module script) は、 モジュールスクリプトfetchクライアント設定群オブジェクト終点既訪集合fetchの実行続きの処理について、 次のようにします。 >>164

  1. [297] モジュールスクリプト記録null の場合、
    1. [298] モジュールスクリプトについて、続きの処理を実行します。
  2. [302] それ以外の場合、
    1. [299] 記録を、モジュールスクリプトモジュール記録に設定します。
    2. [300] 記録RequestedModulesの場合、
      1. [301] モジュールスクリプトについて、続きの処理を実行します。
    3. [303] それ以外の場合、
      1. [304] URL群を、新しい空リストに設定します。
      2. [305] 記録RequestedModules の各被要求について、順に、
        1. [306] URL を、 モジュールスクリプト基底URL被要求についてモジュール指定子の解決を実行した結果に設定します。
        2. [307] 祖先リストURL が含まれない場合、
          1. [308] URL群の末尾に、URL を追加します。
          2. [272] 既訪集合に、 URL を追加します。
      3. [311] 結果群を、URL群と同じ長さリストに設定します。 各値は、未定義とします。
      4. [314] URL群の場合、
        1. [315] モジュールスクリプトについて、続きの処理を実行します。
      5. [316] それ以外の場合、
        1. [347] 子孫オプション群を、 オプション群子孫スクリプトfetchオプション群に設定します。
        2. [309] URL群の各 URL (位置索引) について、順に、
          1. [310] 並列に (SHOULD)、 内部モジュールスクリプトグラフfetch手続きを実行します。
            URL
            URL
            fetchクライアント設定群オブジェクト
            fetchクライアント設定群オブジェクト
            終点
            終点
            オプション群
            子孫オプション群
            モジュール写像設定群オブジェクト
            モジュールスクリプト設定群オブジェクト
            既訪集合
            既訪集合
            参照子
            モジュールスクリプト基底URL
            最上位モジュールfetchフラグ
            fetchの実行
            fetchの実行
            続きの処理
            >>324

[324] 個々の続きの処理は結果について、次のようにします。 >>164

  1. [318] 結果null の場合、
    1. [313] 失敗済みを、に設定します。
    2. [319] 結果について続きの処理を実行します。
  2. [320] それ以外で、失敗済みの場合、
    1. [321] ここで停止します。
  3. [317] それ以外の場合、
    1. [312] 結果群 [ 索引 ] を、結果に設定します。
    2. [323] モジュールスクリプトについて続きの処理を実行します。

[325] モジュールスクリプトの子孫のfetchと実現値化 (fetch the descendants of and instantiate a module script) は、 モジュールスクリプトfetchクライアント設定群オブジェクト終点既訪集合 (既定値空集合)、 続きの処理について、次のようにします。 >>164

  1. [326] fetchクライアント設定群オブジェクト終点既訪集合について、 モジュールスクリプトの子孫のfetchを実行します。 続きの処理は、 >>327 とします。

[327] その続きの処理は、結果について、次のようにします >>164

  1. [328] 結果null の場合、
    1. [329] 結果について、続きの処理を実行します。
  2. [330] それ以外の場合、
    1. [322] 構文解析エラーを、 結果について最初の構文解析エラーを探す処理を実行した結果に設定します。
    2. [351] 構文解析エラーnull の場合、
      1. [331] 記録を、結果記録に設定します。
      2. [332] 記録Instantiate を実行します。 例外投げられた場合、 結果再び投げるエラーを、その例外に設定します。
    3. [350] それ以外の場合、
      1. [352] 結果再び投げるエラーを、 構文解析エラーに設定します。
    4. [333] 結果について、続きの処理を実行します。

[353] 最初の構文解析エラーを探す (find the first parse error) 処理は、 モジュールスクリプト見つけた集合 (既定値は空集合) について、 次のようにすることをいいます >>164

  1. [354] モジュール写像を、モジュールスクリプト設定群オブジェクトモジュール写像に設定します。
  2. [355] 見つけた集合モジュールスクリプト末尾に追加します。
  3. [356] モジュールスクリプト記録null の場合、
    1. [357] モジュールスクリプト構文解析エラーを返します。
  4. [358] それ以外の場合、
    1. [359] モジュールスクリプト記録RequestedModules の各子供指定子について、順に
      1. [362] 子供URLを、 子供指定子モジュールスクリプトについてモジュール指定子の解決を適用した結果に設定します。
      2. [363] 子供モジュールを、 モジュール写像 [ 子供URL ] に設定します。
        1. [360] 見つけた写像子供モジュール含まれていない場合、
          1. [361] 子供構文解析エラーを、 子供モジュール見つけた集合についての最初の構文解析エラーを探す処理の結果に設定します。
          2. [364] 子供構文解析エラーnullない場合、
            1. [365] 子供構文解析エラーを返し、ここで停止します。
    2. [366] null を返します。

fetchの実行

[117] スクリプトのfetch の各手順の呼び出し元は、 fetchの実行 (perform the fetch) の手続きを定義できます >>4。 これは要求最上位フラグ、続きの処理についての処理です。

[111] script 要素importScripts の場合、次のようにします >>4

  1. [112] 要求について fetch します。process response は、 続きの処理とします。

[109] WorkerSharedWorker の場合、 呼び出し元であるワーカーを走らせる手順内側設定群ワーカー大域適用範囲を使って、 次のようにします >>4

  1. [181] 要求予約クライアントを、内側設定群に設定します。
  2. [140] 要求について fetch を実行します。 process response は、 >>110 とします。

[110] fetch の結果を受けて、応答を次のようにします >>4

  1. [131] ワーカー大域適用範囲URLを、 応答URLに設定します。
  2. [132] ワーカー大域適用範囲HTTPS状態を、 応答HTTPS状態に設定します。
  3. [128] ワーカー大域適用範囲参照元ポリシーを、 応答について Referrer-Policy: ヘッダー構文解析して得た参照元ポリシーに設定します。
  4. [133] ワーカー大域適用範囲応答について、 大域オブジェクトのCSPリストの初期化を実行します。
  5. [134] 応答について続きの処理を実行します。

[120] サービスワーカー更新 (Update) では、 次のようにします >>119

  1. [188] 要求ヘッダーリストに、 Service-Worker: script を追加します。
  2. [190] 次のいずれかの場合:
    1. [189] 要求キャッシュモードを、no-cache に設定します。
  3. [194] 要求サービスワーカーモードを、 none に設定します。
  4. [195] 最上位の場合、
    1. [196] 要求続きの処理について fetch し、ここで停止します。
  5. [197] 要求リダイレクトモードを、 error に設定します。
  6. [198] 要求fetch します。process response>>199 とします。

[199] process response は、応答について次のようにします >>119

  1. [200] 応答ヘッダーリストからMIME型を抜き取る処理の結果得られたMIME型 (引数以外) がサービスワーカーのMIME型のいずれかでない場合、
    1. [201] ジョブSecurityError についてジョブ約束を拒絶します。
    2. [202] ネットワークエラーについて続きの処理を実行します。
    3. [203] ここで停止します。
  2. [204] 承認を、応答ヘッダーリストService-Worker-Allowed ヘッダーの値に設定します。
  3. [205] HTTPS状態を、応答HTTPS状態に設定します。
  4. [206] 参照元ポリシーを、 応答について Referrer-Policy: ヘッダー構文解析して得た参照元ポリシーに設定します。
  5. [207] 承認失敗の場合、
    1. [208] ネットワークエラーについて続きの処理を実行します。
    2. [209] ここで停止します。
  6. [212] 承認null の場合、
    1. [213] 最大適用範囲文字列を、ジョブスクリプトURLディレクトリーURLURL pathの文字列に設定します。
  7. [214] それ以外の場合、
    1. [215] 最大適用範囲を、承認ジョブスクリプトURLに対して構文解析した結果に設定します。
    2. [216] 最大適用範囲文字列を、最大適用範囲URL pathの文字列に設定します。
  8. [210] 登録適用範囲URLURL pathの文字列が最大適用範囲文字列から始まらない場合、
    1. [219] ジョブSecurityError についてジョブ約束を拒絶します。
    2. [220] ネットワークエラーについて続きの処理を実行します。
    3. [221] ここで停止します。
  9. [222] 応答キャッシュ状態localない場合、
    1. [223] 登録last update check timeを、現在時刻に設定します。
  10. [224] 応答について続きの処理を実行します。

[106] かつては他に要求の準備 (set up the request) 応答の処理 (process the response) も定義されていましたが、 fetchの実行に統合されました。

歴史

スクリプト

[11] script 要素に関する処理は、 HTML5script 要素の処理を明文化した際に初めて規定されました。

script 参照。

ワーカー

[1] ワーカーに関する処理は、ワーカー導入時に run a worker 処理の一部として規定されました。

run a worker を参照。

モジュール

[3] モジュールの導入により、古典スクリプトを参照する script 要素fetch 部分の処理はや古典スクリプトを使ったワーカーfetch 部分の処理はそれぞれ単独の手続きに (仕様書上) 分離されました。

[97] Fix fetching module scripts with circular imports · whatwg/html@3c047b5 ( 版) https://github.com/whatwg/html/commit/3c047b5a35da7af9cffef2a654a944e33be256cc

[99] Make script fetching more correct with regard to request destinations · whatwg/html@6dc9c9e ( 版) https://github.com/whatwg/html/commit/6dc9c9e1efcc3122294fb015e4a4eea66456a611

[101] Add set up the request/validate the response hooks to script fetching · whatwg/html@33ef23a ( 版) https://github.com/whatwg/html/commit/33ef23a6a046db6469a1eb1a6a76f0fdedba8d55

[125] 27852 – Consider rejecting script responses whose MIME type isn't sufficiently scripty. ( 版) https://www.w3.org/Bugs/Public/show_bug.cgi?id=27852

[126] Block `image/*` resources loaded as script · whatwg/fetch@b561a73 ( 版) https://github.com/whatwg/fetch/commit/b561a73f23b7139d5f4bb0de322dc37e74af0091

[127] Pass cryptographic nonce metadata to Fetch · whatwg/html@5479e07 ( 版) https://github.com/whatwg/html/commit/5479e07a6f6e01062b85b5fe6799752b0370336c

[129] Get a reference to the response correctly in worker initialization · whatwg/html@536a962 ( 版) https://github.com/whatwg/html/commit/536a96229ced274b80f78ad791c34ecfe11b289b

[136] Pass parser metadata to Fetch · whatwg/html@e6500b9 ( 版) https://github.com/whatwg/html/commit/e6500b90244376c023e7b78642dbc7b86829233f

[16] Refactor cryptographic nonce ductwork by mikewest · Pull Request #1032 · whatwg/html ( 版) https://github.com/whatwg/html/pull/1032

[100] Use outside settings object to fetch workers ( (domenic著, )) https://github.com/whatwg/html/commit/4e2b0066cb88fdc7ac65cc6e6a7eb40ac39418bd

[116] Make import statements set the importing script as the referrer ( (@import著, )) https://github.com/whatwg/html/commit/a6c11714b5e64479e945b36f76817c4ed96f3218

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

[138] Add a custom "perform the fetch" hook for modules (domenic著, ) https://github.com/whatwg/html/commit/8c43afcbedf0506ac9d62d85a72f1a23fd9f520c

[141] Align Fetch's destination concept with changes in Fetch (sideshowbarker著, ) https://github.com/whatwg/html/commit/5e8f96a85d182d36c177db0d6fdde58b4ded86d4

[142] Improve all the script-fetching algorithms (domenic著, ) https://github.com/whatwg/html/commit/b4f40e72fcca8a13eefa8a2dd06258378e76fcb7

[149] 1048535 – Cross-origin info leak: [[get]] calls on global expose text (or CSV) sniffed as JS () https://bugzilla.mozilla.org/show_bug.cgi?id=1048535

[150] Handle error cases during module script tree fetching/running better (domenic著, ) https://github.com/whatwg/html/commit/e1af86747f591e33fd0f3f21f301dc866868c9d4

[180] Block additional "script" MIME types (evilpie著, ) https://github.com/whatwg/fetch/commit/2e85ceffe027fe97d56184c8a4fe6f11b5780193

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

[183] Upstream SRI's 'integrity' attribute (mikewest著, ) https://github.com/whatwg/html/commit/4c5066c171610e0c8300a58baf4f94816044cedc

[184] Talk about module script graphs, not trees (domenic著, ) https://github.com/whatwg/html/commit/57775269ed9681cd07f7b4bb33b998b26f48e4eb

[185] Fix classic worker scripts to be created in the correct realm (domenic著, ) https://github.com/whatwg/html/commit/11b6a37f934b528d4e5799b1cd9485e1850e3cf2

[186] Properly queue a task when waiting for a module fetch (domenic著, ) https://github.com/whatwg/html/commit/6e055a81c573330a48c3e71121cffee5654aa119

[211] Clarify the setting of scripts' [[HostDefined]] (domenic著, ) https://github.com/whatwg/html/commit/9b4d858a14bf39aec5624a12f1bb598cb63385aa

[218] Fix an algorithm that was treating null as a module script (domenic著, ) https://github.com/whatwg/html/commit/26aa7c3863d741d227652661a5458bc6f07c478f

[227] Do not attempt to instantiate modules that have previously failed (domenic著, ) https://github.com/whatwg/html/commit/df58a1c6b10739f12efbd80f7fb6205fda0a59ed

[24] Fix error cases of <script type=module> (domenic著, ) https://github.com/whatwg/html/commit/115763124a641e8814665c5014d28155f95ff441

[65] Properly instantiate inline module scripts (domenic著, ) https://github.com/whatwg/html/commit/3a3405a42de289ecb08e915b278064a99794731d

[66] Properly instantiate inline module scripts (domenic著, ) https://github.com/whatwg/html/commit/3a3405a42de289ecb08e915b278064a99794731d

[67] Don't handle impossible errors in HostResolveImportedModule (domenic著, ) https://github.com/whatwg/html/commit/616df18cd9e6c17878db5167909c69ca9f9d2906

[229] Fetch removes type in favor of just destination (annevk著, ) https://github.com/whatwg/html/commit/5f59b7a73d450e244a573e5916deb1c2037c1366

[165] モジュールスクリプトは、 状態 (state) (旧実現値化状態 (instantiation state) ) を持ちます。 その値は、 uninstantiated, errored, instantiated のいずれかです。この状態は、実現値化に失敗したモジュールスクリプトの再実行を回避するために使われています。 >>164

[166] モジュールスクリプトは、 エラー (error) (旧実現値化エラー (instantiation error) ) を持ちます。 状態errored の時に、 JavaScript値が設定されます。 >>164

[25] モジュールスクリプトをエラーにする (error a module script) には、 スクリプトエラーを次のようにします >>164

  1. [26] スクリプトモジュール記録が設定されている場合、
    1. [152] スクリプトモジュール記録HostDefinedを、 未定義に設定します。
    2. [228] スクリプトモジュール記録を、null に設定します。
  2. [234] スクリプト状態を、errored に設定します。
  3. [235] スクリプトエラーを、 エラーに設定します。

[37] 内部モジュールスクリプトグラフfetch手続き (internal module script graph fetching procedure) は、 URLfetchクライアント設定群オブジェクト終点暗号学的nonce構文解析器状態credentialsモードモジュール写像設定群オブジェクト祖先リスト参照元最上位モジュールfetchフラグ、 fetchの実行続きの処理について、次のようにします >>4

  1. [38] URLcredentialsモード暗号学的nonce構文解析器状態終点fetchクライアント設定群オブジェクトモジュール写像クライアント設定群オブジェクト参照元fetchの実行について単一モジュールスクリプトのfetchを実行します。 続きの処理は、 >>39 とします。

[39] その続きの処理は、結果について次のようにします >>4

  1. [40] 結果null の場合、 または結果状態instantiated または errored の場合、
    1. [41] 結果について、続きの処理を実行します。
  2. [42] それ以外の場合、
    1. [236] モジュールスクリプトの子孫をfetchして実現値化します。
      スクリプト
      結果
      終点
      終点
      祖先リスト
      祖先リストの末尾に URL を追加したリスト
      fetchの実行
      fetchの実行
      最上位モジュールfetchフラグ
      続きの処理
      >>160

[160] その続きの処理は、最終結果について次のようにします >>4

  1. [237] 最終結果を返します。

[44] モジュールスクリプトの子孫をfetchして実現値化 (fetch the descendants of and instantiate a module script) (旧モジュールスクリプトの子孫のfetch (fetch the descendants of a module script) ) は、スクリプト終点祖先リストfetchの実行続きの処理を受け取り、次のようにします >>4

  1. [238] スクリプト状態instantiated または errored の場合、
    1. [239] スクリプトについて続きの処理を実行し、ここで停止します。
  2. [46] 記録を、スクリプトモジュール記録に設定します。
  3. [47] 記録.RequestedModulesの場合、
    1. [48] スクリプトについて続きの処理を実行し、ここで停止します。
  4. [49] URL群を、空リストに設定します。
  5. [50] 記録.RequestedModules の各披要求について、順に、
    1. [51] URL を、スクリプト被要求についてモジュール指定子を解決した結果に設定します。
    2. [52] URL失敗の場合、
      1. [240] 誤りを、新しい TypeError に設定します。
      2. [241] スクリプト誤りについてモジュールスクリプトをエラーにする処理を実行します。
      3. [55] スクリプトについて続きの処理を実行し、ここで停止します。
    3. [98] 祖先リストURL含まない場合、
      1. [57] URLURL群末尾に追加します。
  6. [53] 子孫の結果を、 null に設定します。
  7. [68] 完了時を、すべて終わったら実行に設定します。
  8. [58] URL群の各 URL について、順に、
    1. [156] 完了時について実行します。
      処理
      内部モジュールスクリプトグラフfetch手続きを実行します。
      URL
      URL
      credentialsモード
      スクリプトcredentialsモード
      終点
      終点
      設定群オブジェクト
      スクリプト設定群オブジェクト
      暗号学的nonce
      スクリプト暗号学的nonce
      構文解析器状態
      スクリプト構文解析器状態
      祖先リスト
      祖先リスト
      参照元
      スクリプト基底URL
      最上位モジュールfetchフラグ
      fetchの実行
      fetchの実行
      続きの処理
      処理状態について、 >>60
      中断処理
      この fetch を中断して構いません。
  9. [157] 完了時について >>246 を完了時に実行します。
[45] モジュールスクリプトグラフのfetchの他、 script 要素の処理から呼び出されることもあります。

[60] 続きの処理は、処理状態結果について次のようにします >>4

  1. [43] 結果により、
    null
    1. [62] 完了時を中断します。
    2. [242] 子孫の結果を、 null に設定します。
    モジュールスクリプト状態errored
    1. [244] 完了時を中断します。
    2. [245] 子孫の結果を、モジュールスクリプトに設定します。
    それ以外
    1. [158] 完了時中断済みでない場合、
      1. [161] 子孫の結果を、スクリプトに設定します。
  2. [59] 処理状態の完了を実行します。

[246] 完了時には、次のようにします >>4

  1. [233] 実現値化状態を、記録ModuleDeclarationInstantiation を実行した結果に設定します。
  2. [153] スクリプト未実現値化包括的子孫モジュールスクリプト群の各スクリプトについて、
    1. [154] 実現値化状態abrupt completion なら、
      1. [217] スクリプト実現値化状態についてモジュールスクリプトをエラーにする処理を実行します。
    2. [243] それ以外の場合、
      1. [159] スクリプト実現値化状態を、 instantiated に設定します。
  3. [155] 子孫の結果について、続きの処理を実行します。

[167] スクリプト未実現値化包括的子孫モジュールスクリプト群 (uninstantiated inclusive descendant module scripts) は、 次のようにして得ます >>4

  1. [61] スクリプトモジュール記録null の場合、
    1. [64] 空集合を返し、ここで停止します。
  2. [168] モジュール写像を、スクリプト設定群オブジェクトモジュール写像に設定します。
  3. [170] 包括的子孫を、空集合に設定します。
  4. [169] スタックを、スクリプトを含んだリストに設定します。
  5. [171] スタックでない間、繰り返し、
    1. [172] 現在を、スタックの最後の項目に設定し、スタックからこれを削除します。
    2. [173] 現在包括的子孫にもスタックにも含まれないなら、
      1. [174] 現在を、包括的子孫に追加します。
      2. [175] 子供指定子群を、現在モジュール記録RequestedModulesに設定します。
      3. [176] 子供URL群を、子供指定子群の各項目にモジュール指定子の解決を適用したものの集合から失敗を除去したものに設定します。
      4. [177] 子供モジュール群を、モジュール写像においてキー子供URL群に含まれる集合に設定します。
      5. [178] 子供モジュール群の各項目について、
        1. [225] 項目包括的子孫群含まれ項目nullない場合、
          1. [226] 項目スタックに追加します。
  6. [179] 包括的子孫の項目のうち、状態uninstantiated のものの集合を返します。

[69] 単一モジュールスクリプトのfetch (fetch a single module script) は、 URLcredentialsモード暗号学的nonce構文解析器状態終点fetchクライアント設定群オブジェクトモジュール写像設定群オブジェクト参照元最上位モジュールfetchfetchの実行続きの処理について次のようにします >>4

  1. [70] モジュール写像を、モジュール写像設定群オブジェクトモジュール写像に設定します。
  2. [71] モジュール写像キーURLfetching のエントリーが含まれていれば、
    1. [72] 並列に値が変化するのを待ちます。変化したら >>73 を実行します。
  3. [74] それ以外なら、
    1. [75] >>73 を実行します。

[73] fetching でなくなった時、次のようにします >>4

  1. [187] タスクをキューに追加します。
    処理
    1. [76] モジュール写像キーURL のエントリーが含まれていれば、
      1. [77] 当該エントリーのについて続きの処理を実行し、ここで停止します。
    2. [78] モジュール写像キーURL で値が fetching のエントリーを追加します。
    3. [79] 要求を、新しい要求に設定します。
      [163] 要求
      URL
      URL
      終点
      終点
      script
      モード
      cors
      credentialsモード
      credentialsモード
      構文解析器メタデータ
      構文解析器状態
      暗号学的nonceメタデータ
      暗号学的nonce
      クライアント
      fetchクライアント設定群オブジェクト
      参照元
      参照元
    4. [113] 要求についてfetchの実行をします。 最上位フラグは、最上位モジュールfetchフラグとします。 続きの処理>>80 とします。
    タスク源
    ネットワーク処理タスク源

[80] fetch の結果の処理は、応答について次のようにします >>4

  1. [81]
    ... のいずれかの条件を満たしたら、
    1. [82] モジュール写像キーURL のエントリーのを null に設定します。
      • [92] これにより他の fetch の処理 (>>72) が呼び出されることがあります。
    2. [84] null について続きの処理を実行します。
    3. [83] ここで停止します。
  2. [88] ソーステキストを、応答本体UTF-8復号した結果に設定します。
  3. [89] スクリプトを、ソーステキストモジュール写像設定群オブジェクト応答URLcredentialsモード暗号学的nonceについてモジュールスクリプトの作成を実行した結果に設定します。
    構文解析器状態
  4. [90] モジュール写像キーURL のエントリーのを、 スクリプトに設定します。
    • [93] これにより他の fetch の処理 (>>72) が呼び出されることがあります。
  5. [91] スクリプトについて続きの処理を実行します。

[261] 2017年、JavaScript 側の改訂に伴いモジュールスクリプトの処理に大きな変更が入りました。

[230] Improve module instantiation/evaluation, especially around errors (domenic著, ) https://github.com/whatwg/html/commit/2b408b65a11fe76b6588b744e0ae74d30ff29b43

[334] Editorial: decrease traversals for module graph fetching (domenic著, ) https://github.com/whatwg/html/commit/6b20dfb8143cadc8eed92f663d80530440d59c7d

[335] Editorial: decrease traversals for module graph fetching (domenic著, ) https://github.com/whatwg/html/commit/6b20dfb8143cadc8eed92f663d80530440d59c7d

[340] Editorial: decrease traversals for module graph fetching by domenic · Pull Request #2971 · whatwg/html () https://github.com/whatwg/html/pull/2971

[341] Editorial: refactor classic and module scripts to be more alike (domenic著, ) https://github.com/whatwg/html/commit/dce999aac4d9deeefa3b338dd2aeb30c17669bc8

[231] Editorial: refactor classic and module scripts to be more alike by domenic · Pull Request #2972 · whatwg/html () https://github.com/whatwg/html/pull/2972

[342] Editorial: move base URL from "module script" to "script" (domenic著, ) https://github.com/whatwg/html/commit/5458513792ab00d58e6c91ba48faaa611d034a2e

[343] Make integrity="" work on module scripts (domenic著, ) https://github.com/whatwg/html/commit/9275d955dcd604e959cfcc672e0c234b1b8c00db

[348] Does integrity="" intentionally not work on module <script>s? · Issue #2382 · whatwg/html () https://github.com/whatwg/html/issues/2382


[232] モジュールスクリプトスクリプトエラーである (is errored) とは、 スクリプト記録null であるか、 スクリプト記録Statuserrored であることをいいます。 >>164

[247] モジュールスクリプトスクリプトエラー (error) は、 次のものです。 >>164

  1. [248] スクリプトモジュール記録null の場合、
    1. [249] スクリプト実現値化前エラーを返します。
  2. [250] それ以外で、 スクリプト記録Statuserrored の場合、
    1. [251] スクリプト記録ErrorCompletionValue を返します。
  3. [252] それ以外の場合、
    1. [253] null を返します。

[254] モジュールスクリプトスクリプト実現値化前エラーを設定 (set the pre-instantiation error) するには、 エラーについて、次のようにします。 >>164

  1. [255] 記録を、スクリプト記録に設定します。
  2. [256] 記録null でない場合、
    1. [257] 記録HostDefined を、未定義に設定します。
    2. [258] スクリプト記録を、 null に設定します。
  3. [259] スクリプトエラーを、エラーに設定します。

[260] モジュールスクリプトスクリプト実現値化されている (has instantiated) とは、 スクリプト記録null でなく スクリプト記録Statusinstantiated または evaluated であることをいいます。>>164


[349] Fix module script error handling, again (domenic著, ) https://github.com/whatwg/html/commit/165101a955652f715e551917c80ab8140429978f

[367] Fix module script error handling, again (domenic著, ) https://github.com/whatwg/html/commit/165101a955652f715e551917c80ab8140429978f

[368] Fix module script error handling, again by domenic · Pull Request #2991 · whatwg/html () https://github.com/whatwg/html/pull/2991

[369] Editorial: update usage of the MIME Sniffing Standard (domenic著, ) https://github.com/whatwg/html/commit/fc82f4f8774a2e7e80f6c9477bd881f6c783b186

[370] Add <link> rel="modulepreload" (domenic著, ) https://github.com/whatwg/html/commit/7c28027b80208aa6b126fa7b086c44877f584178

[371] Editorial: change "resolve a module specifier" to take a URL (domfarolino著, ) https://github.com/whatwg/html/commit/8176d055eaef62cad03327a7cc47c5c7926ffb0c

[372] Resolve a module specifier now takes a base URL by domfarolino · Pull Request #3807 · whatwg/html () https://github.com/whatwg/html/pull/3807

[373] Use fetch client settings object for fetching dependency modules (hiroshige-g著, ) https://github.com/whatwg/html/commit/184be2f979a1020972a9735cb3f6f4ca66177ebb

[374] Fetch client settings object is used only for top-level module script · Issue #3757 · whatwg/html () https://github.com/whatwg/html/issues/3757

[375] Use fetch client settings object for fetching submodules by hiroshige-g · Pull Request #3758 · whatwg/html () https://github.com/whatwg/html/pull/3758

[376] Add referrerpolicy attribute support to <script>s (domfarolino著, ) https://github.com/whatwg/html/commit/0d28f8fc3a7c272f6d148f647ead29965a56ab60

[377] Enforce strict MIME type checks for worker-imported scripts (mikewest著, ) https://github.com/whatwg/html/commit/d1c3679934f52450666750464effb97e14f555e0

[378] Nosniffing for Worker Scripts · Issue #3255 · whatwg/html () https://github.com/whatwg/html/issues/3255

[379] Enforce strict MIME type checks for worker-imported scripts. by mikewest · Pull Request #4001 · whatwg/html () https://github.com/whatwg/html/pull/4001