概要
- 配置できる場所
-
- 上記カテゴリーの要素が置ける場所。
- 内容モデル
-
src
属性がない場合は、type
属性で指定するスクリプト言語等のコードテキスト。src
属性がある場合は、空であるか、スクリプトの仕様に合致するテキスト(type
属性で指定するスクリプト言語におけるコメント文など)かのいずれか。- いずれにしても書ける文字等に制限がある(当該制限を満たす最も簡単で安全な方法は、
<!--
を\x3c!--
として、<script
を\x3cscript
として、</script
を\x3c/script
として、常にエスケープすることである)。
- 属性
-
- グローバル属性
src
→外部スクリプトのリソースを示すURLasync
→ブーリアン属性。指定されれば、スクリプトは利用可能になった時点で非同期的に実行される。defer
→ブーリアン属性。指定されれば、スクリプトはHTML文書全体の解釈が終了したときに実行される。blocking
→値は下記のとおり。半角スペース区切りで複数指定可(現状一種類の値しか指定できないので意味はない)。読み込む際に何を阻止するかを指定する。render
→レンダリングを阻止する。この状態は、スクリプトで解除処理をするか、閲覧文脈への接続が切断されるかのいずれかによって解除される。
crossorigin
→値は下記のとおりで、空も可。空の場合は、anonymous
と同等。デフォルトは、anonymous
。別オリジン(→別ドメインなど)からの読み込みに対して、ユーザー認証情報の要否を指定する。anonymous
→ユーザー認証情報を求めない。use-credentials
→ユーザー認証情報を求める。
integrity
→サブリソースの改竄検証のためのハッシュ値。詳細は、Subresource Integrityを参照。nomodule
→ブーリアン属性。指定されれば、モジュールスクリプトをサポートするユーザーエージェントで当該スクリプトが実行されないようにする。referrerpolicy
→値は下記のとおり。アクセス又はリソース読み込みのときのリファラーヘッダに関するポリシーを指定する。詳細は、Referrer Policyを参照。no-referrer
→リファラーヘッダを削除し、リファラー情報を送信しない。no-referrer-when-downgrade
→TLSで保護されたクライアントから信用に値し得ないURLへの送信の際は、リファラーヘッダを削除し、リファラー情報を送信しない。その他の場合は、リファラー情報を全部送信する。same-origin
→非同一オリジンからの要請に対しては、リファラーヘッダを削除し、リファラー情報を送信しない。同一オリジンからの要請に対しては、リファラー用に削った全部情報を送信する。origin
→ドメイン部分のみをリファラー情報として送信する(例:「https://example.com/example.html」からのアクセス→「https://example.com/」のみを送信)。strict-origin
→TLSで保護されたクライアントから信用に値し得ないURLへの送信の際は、リファラーヘッダを削除し、リファラー情報を送信しない。その他の場合は、ドメイン部分のみをリファラー情報として送信する。origin-when-cross-origin
→非同一オリジンからの要請に対しては、ドメイン部分のみをリファラー情報として送信する。同一オリジンからの要請に対しては、リファラー用に削った全部情報を送信する。strict-origin-when-cross-origin
→TLSで保護されたクライアントから信用に値し得ないURLへの送信の際は、リファラーヘッダを削除し、リファラー情報を送信しない。その他の場合で、非同一オリジンからの要請に対しては、ドメイン部分のみをリファラー情報として送信する。その他の場合で、同一オリジンからの要請に対しては、リファラー用に削った全部情報を送信する。unsafe-url
→リファラー用に削った全部情報を送信する。
fetchpriority
→値は下記とおり。デフォルトは、auto
。同種リソース間におけるキャッシュ事前取得の優先度を指定。high
→優先度高。low
→優先度低。auto
→優先度自動。
type
→module
(ジャバスクリプトモジュールスクリプト)、importmap
(インポートマップ指定)、又は、スクリプト・データブロックの言語・形式を指定するMIME type。デフォルトは、text/javascript
。クラシックスクリプト(=ジャバスクリプト類)を示すもの(該当するものは下記のとおり)以外のMIME typeを指定した場合は、データブロックと解釈される。なお、この属性値にクラシックスクリプト(=ジャバスクリプト類)を示すMIME type(該当するものは下記のとおり)を指定することとなってしまう場合は、この属性は省略すべきである。application/ecmascript
application/javascript
application/x-ecmascript
application/x-javascript
text/ecmascript
text/javascript
text/javascript1.0
text/javascript1.1
text/javascript1.2
text/javascript1.3
text/javascript1.4
text/javascript1.5
text/jscript
text/livescript
text/x-ecmascript
text/x-javascript
src
属性がない場合は、async
、defer
、integrity
の各属性は指定してはならない。type
属性値がmodule
の場合は、defer
、nomodule
の各属性は指定してはならない。type
属性値がimportmap
の場合、又は、データブロックである場合は、crossorigin
、src
、async
、defer
、integrity
、nomodule
、referrerpolicy
の各属性は指定してはならない。type
属性値がimportmap
のscript
要素が、同一HTML文書内に複数あってはならない。type
属性値がデータブロックである場合は、fetchpriority
属性は指定してはならない。async
属性とdefer
属性の両方が指定されていた場合は、async
属性の効果が優先。ただし、asyc
属性をサポートしないブラウザに対しては、defer
属性の効果が発動する。- これらの属性をスクリプトで操作しても何も起こらない。
- HTML構文におけるタグの省略
-
- 省略不可。
- 視覚系ブラウザのデフォルトとして期待されるCSS
-
script {display: none;}
- 準拠チェッカーに対する規定
-
script
要素に廃止されたlanguage
属性が指定されていても、その属性値がJavaScript
であり、かつ、type
属性が指定されてないか又はtype
属性値がtext/javascript
である限り、エラーとはせずに警告にとどめることが許容される。script
要素に廃止されたcharset
属性が指定されていても、その属性値がutf-8
である場合に限り、エラーとはせずに警告にとどめることが許容される。script
要素に省略すべきtype
属性が指定されていても、その属性値がジャバスクリプト類を示すMIME typeである場合に限り、エラーとはせずに警告にとどめることが許容される。
- ユーザーエージェントに対する特記事項
-
- データブロック以外の場合で、かつ、
src
属性が指定されている場合においては、廃止されたcharset
属性が指定されたなら、当該charset
属性は読み込むスクリプトの文字エンコーディングを判定するものとして作用する。 - モジュールスクリプトがCSSモジュールスクリプトとして解析できた場合は、解析済みのCSSとして取り扱う。
- モジュールスクリプトがJSONモジュールスクリプトとして解析できた場合は、解析済みのJSONとして取り扱う。
- データブロック以外の場合で、かつ、
- 意味・用法
-
この要素は、HTML文書に動的スクリプトや(スクリプトで利用されるだろう)データブロックを組み込むことを、著者に許す。
閲覧者に対しては、内容は表示されない。
モジュールスクリプトの種類には、ジャバスクリプトモジュールスクリプト、JSONモジュールスクリプト、CSSモジュールスクリプト、WebAssemblyモジュールスクリプトがある。
スクリプトは、外部スクリプトのリソースを
src
属性で指定して読み込むか、script
要素の内容にコードテキストを書き込むかのいずれか。スクリプトの種類ごとの可否は下記のとおり。- クラシックスクリプト→
src
属性による外部スクリプトのリソースの読み込みは、可。script
要素の内容へのコードテキストの書き込みは、可。 - ジャバスクリプトモジュールスクリプト→
src
属性による外部スクリプトのリソースの読み込みは、可。script
要素の内容へのコードテキストの書き込みは、可。 - データブロック→
src
属性による外部スクリプトのリソースの読み込みは、不可。script
要素の内容へのコードテキストの書き込みは、可。 - インポートマップ指定→
src
属性による外部スクリプトのリソースの読み込みは、不可。script
要素の内容へのコードテキストの書き込みは、可。
- クラシックスクリプト→
アクセシビリティ関連
- 代替テキスト相当:
noscript
要素の内容から取得できるテキスト(ただし、XML構文では不可)、又は、何らかの要素で代替テキストを記載してスクリプトで消去する。 - 未対応ユーザーエージェント向け代替コンテンツ:
noscript
要素の内容(ただし、XML構文では不可)、又は、何らかの要素で代替コンテンツを用意してスクリプトで消去する。 - アクセシビリティ支援技術向け:スクリプトに未対応であるならば、前の項目と同じ状況になると思われる。
- スクリプトがアクセス不能又は正常に処理できなかった場合:スクリプトの処理結果は提示されない。この場合、何らかの要素で代替コンテンツを用意してスクリプトで消去する方法なら、代替コンテンツとして機能する。そうでない場合は、代替コンテンツはない。
noscript
要素はあまり当てにならないので、何らかの要素で代替コンテンツを用意してスクリプトで消去する方法を用いるべきだろう。
私見・補足
一般的なHTML文書では、スクリプトが機能しなくても基本的な情報は読めるようにしておくのが基本である。
コードテキストを内容とする場合は、style
要素によるスタイルシートの埋め込みと同様に、コードテキストをコメントの中に入れるという方法やコードテキストをCDATAセクションとする方法もあるが、問題点も同様である。
CSSモジュールスクリプト、JSONモジュールスクリプト、WebAssemblyモジュールスクリプト→仕様上は、HTML文書作成者には、script
要素によって直接的に読み込んだり書き込んだりする方法は与えられてない。ただし、script
要素によるスクリプトの中で、他のモジュールスクリプトを読み込む構文を記述するときに読み込み対象に指定する形で間接的に読み込める。