[121] script
要素やワーカーの処理では、
外部スクリプトの fetch を行うことがあります。
[122] スクリプトの種類によって処理はかなり違っています。
script
要素[12] 古典スクリプトのfetch >>4 は、 次の引数を受け取ります。
[124] 古典スクリプトの場合、歴史的理由により、文字コードを指定できます
(<script charset>
)。 (他の種類のスクリプトでは UTF-8
に固定されています。)
[18] fetchの実行の結果を受けて、fetchの応答を次のようにします >>4。
Content-Type
ヘッダーの charset
引数で指定された値<script charset>
で指定された値... の優先順で決まります。
[6] 古典ワーカースクリプトのfetch >>4 は、次の引数を受け取ります。
[7] 次のようにします。
script
same-origin
same-origin
not-parser-inserted
[56] fetch の結果を受けて、fetchの応答を次のように処理します。
[95] この手続きは、ワーカーを走らせる処理 (専用ワーカー、共有ワーカー) と更新 (サービスワーカー) から呼び出されます。
[115] 古典ワーカーで輸入されたスクリプトをfetch
>>4 は、次の引数を受け取ります。
[135] fetchの実行の結果を踏まえて、fetchの応答について次のようにします。error
、
応答の状態がOK状態以外、
応答のヘッダーリストに extract a MIME type
を適用した結果が
JavaScript MIME型でない、
のいずれかの場合、NetworkError
DOMException
を投げ、ここで停止します。
[151] モジュールスクリプトの場合、直接指定されたモジュールスクリプトに加えて、
import
で直接または間接に参照されているモジュールスクリプトも
fetch します。ただし、重複読み込みは実行環境ごとに記録されていて、
(今回のスクリプトのfetchに限らず) fetch 済みなら、飛ばされます。
他で既に fetch 中なら、それが完了するのを待ちます。
すべての fetch が完了したら、次の処理へと進めます。
[162] この状態管理を行うため、また Webブラウザーの処理と JavaScriptエンジンの処理が絡み合うため、
更には ServiceWorker
で特殊な処理を挟むため、
モジュールスクリプトの読み込み処理はかなり複雑になっています。
script
要素[36] モジュールスクリプトグラフのfetch >>4 は、次の引数を受け取ります。
[33] モジュールワーカースクリプトグラフのfetch >>4 は、次の引数を受け取ります。
client
[32] モジュールワーカースクリプトグラフのfetchは、ワーカーを走らせる処理 (専用ワーカー、共有ワーカー) と更新 (サービスワーカー) から呼び出されます。
[148] モジュールスクリプト内の import
は、
モジュールスクリプトの子孫のfetchにより処理されます。
[262] 内部モジュールスクリプトグラフfetch手続きは、 次のようにします。 >>164
引数として、次のものを受け取ります。 URL, fetchクライアント設定群オブジェクト, 終点, オプション群, モジュール写像設定群オブジェクト, 既訪集合, 参照子, 最上位モジュールfetchフラグ, fetchの実行, 続きの処理。
[264] その続きの処理は、結果について、次のようにします >>164。
null
の場合、[273] 単一モジュールスクリプトのfetchは、 次のようにします。 >>164
引数として、次のものを受け取ります。 URL, fetchクライアント設定群オブジェクト, 終点, オプション群, モジュール写像設定群オブジェクト, 参照子, 最上位モジュールfetchフラグ, fetchの実行, 続きの処理。
[283] その続きの処理は、応答について、次のようにします。 >>164
error
、
応答の状態が OK状態でない、
応答のヘッダーリストについてextract a MIME typeして引数を無視すると
JavaScript MIME型とならない、のいずれかが真の場合、[296] モジュールスクリプトの子孫のfetchは、 モジュールスクリプト、 fetchクライアント設定群オブジェクト、 終点、既訪集合、 fetchの実行、続きの処理について、 次のようにします。 >>164
null
の場合、[324] 個々の続きの処理は結果について、次のようにします。 >>164
[325] モジュールスクリプトの子孫のfetchと実現値化は、 モジュールスクリプト、 fetchクライアント設定群オブジェクト、 終点、 既訪集合 (既定値は空集合)、 続きの処理について、次のようにします。 >>164
[327] その続きの処理は、結果について、次のようにします >>164。
[353] 最初の構文解析エラーを探す処理は、 モジュールスクリプトと見つけた集合 (既定値は空集合) について、 次のようにすることをいいます >>164。
[117] スクリプトのfetch の各手順の呼び出し元は、 fetchの実行の手続きを定義できます >>4。 これは要求、最上位フラグ、続きの処理についての処理です。
[111] script
要素と importScripts
の場合、次のようにします >>4。
[109] Worker
と SharedWorker
の場合、
呼び出し元であるワーカーを走らせる手順の内側設定群とワーカー大域適用範囲を使って、
次のようにします >>4。
[110] fetch の結果を受けて、応答を次のようにします >>4。
[120] サービスワーカーの更新では、 次のようにします >>119。
Service-Worker: script
を追加します。null
でなく、
登録の last update check time が null
でなく、
現在時刻 - 登録の last update check time > 86400none
に設定します。error
に設定します。[199] process response は、応答について次のようにします >>119。
Service-Worker-Allowed
ヘッダーの値に設定します。Referrer-Policy:
ヘッダーを構文解析して得た参照元ポリシーに設定します。null
の場合、local
でない場合、[11] script
要素に関する処理は、 HTML5
が script
要素の処理を明文化した際に初めて規定されました。
script
参照。[1] ワーカーに関する処理は、ワーカー導入時に 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] モジュールスクリプトは、
状態
(旧実現値化状態) を持ちます。
その値は、 uninstantiated
, errored
,
instantiated
のいずれかです。この状態は、実現値化に失敗したモジュールスクリプトの再実行を回避するために使われています。
>>164
[166] モジュールスクリプトは、
エラー
(旧実現値化エラー) を持ちます。
状態が errored
の時に、
JavaScript値が設定されます。
>>164
[25] モジュールスクリプトをエラーにするには、 スクリプトとエラーを次のようにします >>164。
[37] 内部モジュールスクリプトグラフfetch手続きは、 URL、fetchクライアント設定群オブジェクト、 終点、暗号学的nonce、構文解析器状態、 credentialsモード、モジュール写像設定群オブジェクト、 祖先リスト、参照元、最上位モジュールfetchフラグ、 fetchの実行、続きの処理について、次のようにします >>4。
[39] その続きの処理は、結果について次のようにします >>4。
[160] その続きの処理は、最終結果について次のようにします >>4。
[44] モジュールスクリプトの子孫をfetchして実現値化 (旧モジュールスクリプトの子孫のfetch) は、スクリプトと終点と祖先リストとfetchの実行と続きの処理を受け取り、次のようにします >>4。
instantiated
または errored
の場合、記録.RequestedModules
が空の場合、記録.RequestedModules
の各披要求について、順に、null
に設定します。[60] 続きの処理は、処理状態と結果について次のようにします >>4。
ModuleDeclarationInstantiation
を実行した結果に設定します。instantiated
に設定します。[167] スクリプトの未実現値化包括的子孫モジュールスクリプト群は、 次のようにして得ます >>4。
[69] 単一モジュールスクリプトのfetchは、 URL、credentialsモード、暗号学的nonce、構文解析器状態、 終点、fetchクライアント設定群オブジェクト、 モジュール写像設定群オブジェクト、 参照元、最上位モジュールfetch、 fetchの実行、続きの処理について次のようにします >>4。
[73] fetching
でなくなった時、次のようにします >>4。
fetching
のエントリーを追加します。script
cors
[80] fetch の結果の処理は、応答について次のようにします >>4。
[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] モジュールスクリプトスクリプトがエラーであるとは、
スクリプトの記録が null
であるか、
スクリプトの記録の Status が errored
であることをいいます。 >>164
[247] モジュールスクリプトスクリプトのエラーは、 次のものです。 >>164
[254] モジュールスクリプトスクリプトの実現値化前エラーを設定するには、 エラーについて、次のようにします。 >>164
[260] モジュールスクリプトスクリプトが実現値化されているとは、
スクリプトの記録が null
でなく
スクリプトの記録の Status が
instantiated
または 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