/
173.txt
146 lines (106 loc) · 6.93 KB
/
173.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
[44] [CODE(HTMLe)@en[[[script]]]] [[要素]]の
[DFN[[CODE(HTMLa)@en[[[src]]]]]] [[属性]]は、
[[外部スクリプト資源]]の [[URL]] を指定するものです。
この[[属性]]が指定されると、[[スクリプト]]は[[要素]]の[[内容]]ではなく、
指定された [[URL]] で取得できるものとなります。
* 仕様書
[REFS[
- [140] [CITE@en-GB-x-hixie[HTML Standard]] ([TIME[2016-02-21 07:50:23 +09:00]] 版) <https://html.spec.whatwg.org/#the-script-element>
-- [1] '''[CITE@en-GB-x-hixie[HTML Standard]] ([TIME[2016-02-16 01:30:20 +09:00]] 版) <https://html.spec.whatwg.org/#attr-script-src>'''
-- [10] [CITE@en-GB-x-hixie[HTML Standard]] ([TIME[2016-02-21 07:50:23 +09:00]] 版) <https://html.spec.whatwg.org/#attr-script-charset>
]REFS]
* 意味
[2] [CODE(HTMLe)@en[[[script]]]] [[要素]]が[[古典スクリプト]]や[[モジュールスクリプト]]の場合には、
[[外部スクリプト資源]]を参照することができます。 [CODE(HTMLa)@en[[[src]]]]
[[属性]]はその[[外部スクリプト]]の [[URL]] を指定するものです。 [SRC[>>1]]
* 属性値
[3] [CODE(HTMLa)@en[[[src]]]] [[属性値]]は、
[[valid non-empty URL potentially surrounded by spaces]] でなければ[['''なりません''']]
[SRC[>>1]]。
[HISTORY[
[46] [[HTML4]] 時代のこの属性の値は [CODE(SGML)[%[[URI]]]] です。
[[SGML]] 的には [CODE(SGML)[[[CDATA]]]] です。
]HISTORY]
[5] 普通は[[素片識別子]]は使いませんが、
[[スクリプト言語]]によっては使い道があるかもしれません。
少なくても使ってはいけない理由はないでしょう。
[6] 使用実績のある [[scheme]] は、 [CODE(URI)[[[http]]:]], [CODE(URI)[[[https]]:]]
くらいでしょうか。探せば [CODE(URI)[[[ftp]]:]], [CODE(URI)[[[cid]]:]]
もあるかもしれませんし、ブラウザは実装していそうです。
[CODE(URI)[[[chrome]]:]] や [CODE(URI)[[[resource]]:]] など
UA 依存の特殊な scheme に対応しているものもあるでしょう。
[47] この属性は省略可能です。省略すると [CODE(HTMLe)[script]]
要素の内容がスクリプトとみなされます。逆に指定すると内容は無視されます。
[SRC[HTML 4 18.2.1]]
[HISTORY[
[7] [CODE(HTMLa)[src]] 属性を省略して、内容は空であるとしても、 HTML
的には空のスクリプトであるというだけで問題ないはずです。
しかし、スクリプト言語によっては、
まったくの空ではいけないというものももしかするとあるかもしれません。
普通は空でも何も行われないだけです。ただ、
空なら既定の動作をするという変なスクリプト言語もあるかもしれません。
]HISTORY]
* 外部スクリプト資源の制約
[4] [CODE(HTMLe)@en[[[script]]]] [[要素]]の [CODE(HTMLa)@en[[[src]]]]
[[属性]]が参照する[[外部スクリプト資源]]は、
[[古典スクリプト]]なら [[JavaScript]] の [CODE[[[Script]]]]、
[[モジュールスクリプト]]なら [[JavaScript]] の [CODE[[[Module]]]]
の制約に従わなければ[['''なりません''']] [SRC[>>1]]。
* 文脈
[9] [CODE(HTMLe)@en[[[script]]]] [[要素]]の種別が[[データブロック]]の時は、
[CODE(HTMLa)@en[[[src]]]] [[属性]]を使っては[['''なりません''']] [SRC[>>1]]。
* 処理
[12] [CODE(HTMLe)@en[[[script]]]] 参照。
[14] [CODE(HTMLe)@en[[[script]]]] [[要素]][VAR[要素]]への
[CODE(HTMLa)@en[[[src]]]] [[属性の追加]]は、次のようにしなければ[['''なりません''']]
[SRC[>>140]]。
[FIG(steps)[
= [15] [VAR[要素]]が[[文書中]]にあり、
[F[[[「構文解析器挿入」]]フラグ]]が設定されてい''なければ''、
== [16] [VAR[要素]]について[[スクリプトを準備]]します。
]FIG]
[17] [CODE(HTMLa)@en[[[src]]]] [[属性の設定]]については、
[CODE(HTMLe)@en[[[script]]]] [[要素]]の項も参照。
[135] なお、初回処理時の値が使われるので、動的に変更しても、意味を持ちません [SRC[>>140]]。
* [CODE(DOMi)@en[HTMLScriptElement]] インターフェイス [CODE(DOMa)@en[src]] 属性
[13] [CODE(DOMi)@en[[[HTMLScriptElement]]]] [[インターフェイス]]の
[DFN[[CODE(DOMa)@en[[[src]]]]]] [[IDL属性]]は、
[CODE(HTMLa)@en[[[src]]]] [[内容属性]]を[[反映]]しなければ[['''なりません''']]
[SRC[>>140]]。これは[[URL]]として[[反映]]するものです。
* 関連
[8] [CODE(HTMLe)@en[[[script]]]] [[要素]]の他の[[属性]]や[[要素]]の[[内容]]の制約との関係や処理方法については、
[CODE(HTMLe)@en[[[script]]]] を参照。
[11] [CODE(HTMLa)@en[[[charset]]]] [[属性]]は、 [CODE(HTMLa)@en[[[src]]]]
[[属性]]がないとき指定しては[['''なりません''']] [SRC[>>10]]。
* 歴史
** 登場
[21] [CODE(HTMLa)[src]] 属性に対応しているのは [[NN]] 3.0 以降だそうです。
[52]
>>21 つまり [[Netscape Navigator]] 2 では [CODE(HTMLa)@en[src]]
を指定しても[[内容]]を実行してしまいます。
これを使って版で動作を分けるという方法が使われたこともありました。
([[名無しさん]] [sage])
[53]
[[Netscape Navigator 3]]で導入されました。
;; [CITE[Welcome to Netscape Navigator 3.03]] <http://wp.netscape.com/eng/mozilla/3.0/relnotes/windows-3.03.html#JavaScript>
この当時は、[CODE(HTMLa)@en[[[language]]]]または[CODE(HTMLa)@en[[[src]]]]のいずれかが指定されていなければならず、[CODE(HTMLa)@en[[[src]]]]が指定されている時[CODE(HTMLa)@en[[[language]]]]はあってもなくてもよいとされていました。
また、[CODE(HTMLa)@en[[[src]]]]の指定する[[資源]]については、[[JavaScript]]であることを示すために[[媒体型]][CODE(MIME)@en[[[application/x-javascript]]]]と[[札付け]]しなければならないとされています。
** HTML4
[45] 仕様書:
- [[HTML 4]]
-- [CITE[18.2.1 The [CODE(HTMLe)[SCRIPT]] element]]
<IW:HTML4:"interact/scripts.html#edef-SCRIPT">
-- [CODE(HTMLe)[script]] 要素 [CODE(HTMLa)[src]] 属性
<IW:HTML4:"interact/scripts.html#adef-src-SCRIPT">
* メモ
[54]
[[素片識別子]]を[[スクリプト]]に[[引数]]を与えるために使おうとする人がいます。
([[名無しさん]] [WEAK[2006-08-08 11:51:19 +00:00]])
[56]
[CITE@en-us[Sprinkle Javascript library by Jon Davis]] ([CODE[2007-09-14 15:50:15 +09:00]] 版) <http://home.sprinklejs.com:880/>
[84] [CITE@en[Add <script type="module"> and module resolution/fetching/evaluation · whatwg/html@cd1a9fb]]
([TIME[2016-01-21 22:15:58 +09:00]] 版)
<https://github.com/whatwg/html/commit/cd1a9fb1e83f7d0bc30be8b34ecdaf444a0b19a4>
[85] [CITE@en[URLs are parsed and produce records · whatwg/html@30bc255]]
([TIME[2016-02-14 23:00:33 +09:00]] 版)
<https://github.com/whatwg/html/commit/30bc2557105ad62881ec9670f253febbc9761b44>