script-content
<script> 要素の本文を、type 属性の値が指すコンテンツ仕様に従って検証します。
現在対応しているコンテンツ形式:
type の値 | 仕様 |
|---|---|
importmap | HTML Living Standard § Parse an import map string |
speculationrules | HTML Living Standard § 7.6 Speculation rules |
type 属性は ASCII 大文字小文字を区別せずに照合します(ユーザーエージェントの MIME タイプ判定に整合)。
type="importmap"
インポートマップに対して以下を違反として報告します。
- 要素本文が空、または空白のみ
- 本文が JSON としてパースできない
- トップレベル値が JSON オブジェクトではない
- トップレベルに
imports/scopes/integrity以外のキーが存在する importsまたはscopesが JSON オブジェクトではない- 識別子マップ(
importsまたはscopes内の値)に空のキーが存在する - 識別子マップのアドレス(値側)が文字列ではない
- 識別子マップのアドレスが URL-like 識別子ではない(
/,./,../で始まらず、絶対 URL でもない) - 識別子のキーが
/で終わっているのに、アドレスが/で終わっていない integrityが JSON オブジェクトではないintegrityのキーが URL-like 識別子ではないintegrityの値が文字列ではない
❌ このルールに適合しない誤ったコードの例
<script type="importmap"></script>
<script type="importmap">
{
"forbidden": {}
}
</script>
<script type="importmap">
{
"imports": {
"dir/": "/path/to/dir"
}
}
</script>
✅ このルールに適合する正しいコードの例
<script type="importmap">
{
"imports": {
"app": "/path/to/app.js",
"dir/": "/path/to/dir/"
},
"scopes": {
"/scope/": {
"x": "./y.js"
}
}
}
</script>
type="speculationrules"
Speculation Rules は HTML Living Standard § 7.6 で定義されています(元は WICG nav-speculation ドラフトで、現在は HTML Standard へリダイレクトされます)。インラインの投機ルールに対して以下を違反として報告します。
- 要素本文が空・空白のみ、または JSON としてパースできない
- トップレベル値が JSON オブジェクトではない、または
prefetch/prerenderプロパティが存在しない - トップレベルに
tag/prefetch/prerender以外のキーが存在する prefetch/prerenderの値が JSON 配列ではない、またはその中のルールが JSON オブジェクトではない- ルールに
source/urls/where/relative_to/eagerness/referrer_policy/tag/requires/expects_no_vary_search/target_hint以外のキーが存在する sourceが文字列ではない、またはlist/document以外の値である- リストルール(明示または
urlsから推論)にurlsがない、またはwhereが存在する - ドキュメントルール(明示または
whereから推論)にwhereがない、またはurlsが存在する - ルールに
sourceがなく source を推論できない(urlsもwhereもない、または両方ある) urlsが JSON 配列ではない・空・非文字列または空文字列の要素を含むeagernessが文字列ではない、またはimmediate/eager/moderate/conservative以外の値であるwhereが JSON オブジェクトではない、または述語(and/or/not/href_matches/selector_matches)をちょうど 1 つ含まないand/or述語が JSON 配列ではない、または空であるhref_matches/selector_matchesのパターンが文字列でも文字列配列でもない・空・空文字列の要素を含む
❌ このルールに適合しない誤ったコードの例
<script type="speculationrules">
{
"prefetch": [{ "source": "list" }]
}
</script>
<script type="speculationrules">
{
"prefetch": [{ "source": "document", "where": {} }]
}
</script>
✅ このルールに適合する正しいコードの例
<script type="speculationrules">
{
"prefetch": [
{
"source": "document",
"where": {
"and": [{ "href_matches": "/*" }, { "not": { "selector_matches": ".no-prefetch" } }]
},
"eagerness": "moderate"
}
],
"prerender": [{ "source": "list", "urls": ["/next"] }]
}
</script>
Interface
{
"script-content": boolean
}
<script> 要素の本文を、type 属性で示されたコンテンツ仕様 (現状は importmap, speculationrules) に基づき検証します。
Default Severity
error