<script>要素
Technical Summary
script要素は、実行対象のclassic script・module script、または実行しないdata blockを文書へ組み込むためのscript-supporting elementです。
外部classic scriptでは、asyncは利用可能になった時点、deferはHTML解析後に評価します。module scriptは既定でHTML解析後に評価され、deferは効果を持ちません。
Definition / Variants
| Variant | 判定の入口 | 処理の要点 |
|---|---|---|
| Classic script | typeなし、またはJavaScript MIME type | 通常のJavaScriptとして評価。属性がなければ解析を止めて取得・評価する |
| Module script | type="module" | 依存moduleも取得し、既定ではHTML解析後に評価する |
| Data block | JavaScript以外のtype | scriptとして評価せず、アプリケーションが内容をデータとして扱う |
したがって、typeは単なる表示用の文字列ではなく、script要素の種類と処理経路を選ぶ条件です。
Processing order
| 条件 | 取得 | 評価 |
|---|---|---|
| classic / 外部 / 属性なし | HTML解析中に取得 | 取得後すぐ。HTML解析を一時停止 |
classic / 外部 / async | HTML解析と並行 | 利用可能になった時点。順序保証なし |
classic / 外部 / defer | HTML解析と並行 | 解析完了後、文書内の順序で評価 |
| module | module依存関係とともに取得 | 既定では解析完了後。asyncを付けた場合は早期評価が可能 |
classic + no async/defer → fetch → evaluate → continue parsing
classic + async → fetch in parallel → evaluate when ready
classic + defer → fetch in parallel → evaluate after parsing
module → fetch dependencies → evaluate after parsing
Attributes and boundaries
- src外部scriptのsource URLを指定する。外部sourceを使う要素に実行用の本文を同時に置かない。
- typeclassic、module、data blockなどのscript種別を選ぶ。
- async / defer主に外部scriptの取得と評価のタイミングを選ぶ。moduleでは
deferは効果を持たない。 - policyCSPはscript要素そのものとは別のポリシー境界であり、許可されないscriptの実行を阻止し得る。
Fetch and failure boundary
外部scriptの処理は、要素の種類を決めるだけで完了しません。sourceの取得、module依存関係の取得、CORS、CSPなどの条件が後続の評価可否に関係します。特にcross-originのmodule scriptはCORS protocolを必要とします。
source markup
↓ determine script kind
↓ apply policy gates
↓ fetch source / module dependencies
↓ evaluate or expose data block
Fact / Evidence(主張 / 根拠)
主要Factを、適用条件・確認状態・仕様上の根拠位置と対応付けています。未完了の範囲は下のCoverage / Open Issuesに残しています。
| 種別 | Fact / 主張 | 条件・範囲 | 状態 | 根拠 |
|---|---|---|---|---|
| SPEC | type属性がclassic script、module script、data blockなどの種類を選びます。 | 値がない、JavaScript MIME type、module、または別の非script typeの場合。 | 確認済み | HTML Standard: the script element |
| SPEC | 外部classic scriptにasyncもdeferもない場合、取得・評価中はHTML解析を止めます。 | 外部classic scriptで、2つのタイミング属性がない場合。 | 確認済み | HTML Standard: the script element |
| SPEC | asyncは準備できた時点で評価し、deferは解析完了後に文書順で評価します。 | 外部classic scriptの場合。asyncは順序を保証しません。 | 確認済み | HTML Standard: scripting guidance |
| SPEC | module scriptは既定で解析後に評価され、deferは効果を持ちません。 | type="module"の場合。asyncは早期評価を選べます。 | 確認済み | HTML Standard: the script element |
| SPEC | 外部scriptとmodule依存関係の評価は、resource取得やpolicyの条件を受けます。 | 外部またはcross-origin resourceの場合。Fetchやpolicyの境界が評価可否に関係します。 | 確認済み | Fetch Standard |
Evidence
- HTML Standard: The script element — 要素の種類、属性、processing model
- HTML Standard: Scripting, Edition for Web Developers — async、defer、moduleの評価タイミング
- Fetch Standard — 外部resource取得とCORSの境界
Implementation Evidence
仕様上の主張とは別に、ブラウザー実装・WPT・アクセシビリティ観測を記録します。未実施の項目は確認済みとは扱いません。
共通fixture / 実行環境: classic、application/json data block、inline module、動的に追加したclassic scriptを同一HTMLへ配置。Chrome 152.0.0.0 / Windows NT 10.0 / 確認日 2026-09-13。
| 種別 | 再現確認の範囲 | 記録する条件 | 状態 |
|---|---|---|---|
| IMPL | classic・module・data block、dynamic insertionの処理順序 | Chrome 152.0.0.0 / Windows NT 10.0 / 2026-09-13。classicはloading時に実行、動的追加classicは同じparser処理中に即時実行、moduleはinteractive時に実行。application/jsonはdata blockとして扱われ、実行ログなし | 確認済み |
| WPT | script種別、実行順序、module依存関係、Fetch/CORSに関係するテストとの対応 | 106-noimport.html、106-module-noimport.html、dynamically-created-defer-script.html、data-url.htmlを対応付け。2026-09-15 / Chrome 152.0.0.0 / Windows NT 10.0 / wpt.liveで4件を実行し4/4 pass。選定外のWPTと他ブラウザーは未評価 | 部分実行(4/4 pass) |
| AAM | 実行用scriptとdata blockがアクセシビリティツリーへ与える影響の観測 | Chrome 152.0.0.0 / Windows NT 10.0 / 2026-09-13。classic、module、data block自体はAX treeに公開されず、見出し・フォーム・tableなどの可視コンテンツだけが公開された | 観測済み |
WPTの対応付けにはWPTリポジトリ、アクセシビリティの基準にはHTML-AAMを参照します。
Coverage / Open Issues
- 確認済みclassic・module・data blockの区別、async・deferの基本的な処理順序
- 未完了processing algorithmの全分岐、parser insertion、dynamic insertionの完全な追跡
- 未完了CSP、Fetch、CORS、Referrer Policy、IntegrityのCross-Spec詳細
- 未完了今回の実装・AX観測はChrome 1環境のみ。async/deferの外部script、複数ブラウザー、WPT、歴史的変更、実運用上の差分は未登録
このページは初期Coverageです。script要素に関する全事実の検証完了や、すべての実装で同一結果になることを意味しません。
Related surface
最小例と、defer・async・moduleの選び方はYugienのscript要素ページで説明しています。