[1] [[HTTP]] の[[実体頭欄]]である [DFN[[CODE(HTTP)[Content-Script-Type]]]] は、文書の既定の[[スクリプト言語]]を指定します。 [2] 仕様書: - [[HTML 4]] -- [CITE[The default scripting language]] [[#comment]] * 構文 [27] この欄の[[本体]]には、 [CODE(SGML)[%[[ContentType]]]] を指定します [SRC[HTML 4 18.2.2.1]]。 [26] この欄は、 [[HTTP]] の頭欄としても、 [[HTML]] の [CODE(HTMLe)[[[meta]]]] 要素としても指定できます。また、どちらの方法でも、複数指定できます。 しかし、実際に有効なのは一番最後のものだけであり、 2通りの方法で指定されている時は、 [CODE(HTMLe)[meta]] 要素の方が優先されます。 [SRC[HTML 4 18.2.2.1]] HTTP の規定によれば、同じ名前の頭欄を複数指定できるのは、 欄本体が値を[[読点]]で分離した[[並び]]として定義されている場合だけです。 ですから、 HTML 4 仕様書には明記されていませんが、 実際には欄本体は [CODE(SGML)[%ContentType]] の読点分離並びとなります。 [28] HTML 文書が[[内在事象]]属性を持っているのに [CODE(HTTP)[Content-Script-Type]] により既定スクリプト言語が指定されていないのは[RUBYB[不正] [incorrect]]です。 [[UA]] はそれでも適当に解釈を試みて構いませんが、そうする必要はありません。 また、[[著述工具]]は既定スクリプト言語情報を生成して文書が不正にならないようにするべきです。 [SRC[HTML 4 18.2.2.1]] [[#comment]] * 歴史 [15] [CODE(HTTP)[Content-Script-Type]] がはじめて登場したのは 後に HTML 4 の一部となる作業原案の一つ [CITE[Client-side Scripting and HTML]] でした。これ以前は、 [CODE(HTTP)[[[Content-Script-Language]]]] という名前でまったく同じ機能を持っていました。 [16] その後の までは、 JavaScript が既定値でした。 [17] その次の は、 [Q[多くの [[UA]] は JavaScript を既定値とする]]と弱くなっています。 [18] その次の では、 [Q[何らかの指定が必須である]]とされています。 [19] 一年経って随分かたくなりました(w [20] 同じ現象は [CODE(HTTP)[[[Content-Style-Type]]]] でも同時期に起こってます。 HTML として全体的に、現状への妥協というか、 とにかくなんでもいいから標準の確立を急いだ1996年の [[HTML 3.2]] の世代から、 現状を受け入れつつも次の時代への展望を示す1998年の [[HTML 4]] の時代への過渡期とでもいいましょうか。なんとも興味深いところです。 [9] [[SVG]] には、 [CODE(XMLa)[[[contentScriptType]]]] 属性が [CODE(XMLe)[[[svg]]]] 要素に存在します。 (''Scripting - SVG'' ) [10] >>9 古い draft ではこれの次の優先順位で [CODE(HTTP)[Content-Script-Type:]] 欄が使われていましたが、削除されました。 (''Scripting'' ) [11] >>10 なお、これの省略時の既定値は [CODE(MIME)[[[text/ecmascript]]]] でした。 (既定値の規定も削除されました。) [[#comment]] * 実装 [29] 既定スクリプト言語が決定できない場合、 [[Mozilla]] 系は [[JavaScript]] とし、 [[WinIE]] は [CODE(HTMLa)[[[language]]]] 属性や URI scheme 名 ([CODE(char)[:]] を含む。) のような文字列の有無で判定し、それがなければ [[JScript]] とするようです。 実際の文書は指定がない (実際には JavaScript である) ことが多かったですが、 最近は [CODE(HTMLe)[meta]] によって指定するものが増えてきています。 [25] 現時点で、 [[Gecko]] も [[WinIE]] 6 もこの頭欄は実装していないようです。 無視して [[JavaScript]] として実行しようとします。 (WinIE の場合には [CODE(HTMLa)[[[language]]]] 属性や、属性値のはじめの方の [CODE[vbs:]] のような記述が反映されますが。) ([[名無しさん]] [WEAK[2004-03-23 06:28:15 +00:00]]) [36] [CITE[Bug 354630 – Intrinsic events not following directive]] ([CODE[2007-03-31 23:35:12 +09:00]] 版) ([[名無しさん]]) [[#comment]] * 不思議解釈 [30] [[欄本体]]が適当な値、たとえば ([CODE(MIME)@en[[[text/javascript]]]] ではなく) [CODE@en[javascript]] でいいと嘘を布教している人がいます。 例: - [31] [CITE@en[Scripts]] (2001年付け、 [[Jacques Steyn]] 著) : [CODE@en[javascript]], [CODE@en[vbscript]], [CODE@en[tcl]] が値に使えると根も葉もない嘘を教えようとしています。 - [32] [CITE[sample-1 pngアニメ]] (2004年1月付け、 [[Rei]] 著) : [CODE@en[javascript]] を値にした例があり、 実際にこの [[HTML]] [[文書]]でも使っています。 ちなみにこの文書では [CODE(HTTP)@en[[[Content-Style-Type]]]] に関する [CODE(HTMLe)@en[[[meta]]]] [[要素]]もあり、 そちらはなぜか正しく [CODE(MIME)@en[[[text/css]]]] になっています。 - [33] [CITE[ネットで稼いじゃお♪♪>HTML MENU>○META(メタ)]] (2005年7月付け) : 正しい例を示しながら、 [Q[スタイルシートは「CSS]・ジャバスプリクトは「javascript」でも大丈夫なようです。一般的な環境では特に指定しなくても認識されるみたいですが、指定して置いた方がいいみたいです。]] などと無責任なことを述べています。 分かっていない人がいい加減なことを書いているのだとよくわかります。 [34] 更にまだある: ([[名無しさん]] [sage]) [35] >>33 と同じ著者による同じ内容のもの [CITE[スタイルシート・スプリクトの言語を示す]] (2003年7月付け) 低品質なものはどれだけコピっても低品質ですよ[AA(fw)[wwww]] ([[名無しさん]] [sage]) [[#comment]] * 例 - [7] [SAMP[Content-Script-Type: text/tcl]] - [8] [SAMP[]] - [14] [CODE(HTTP)[Content-Script-Type: [[application/x-javascript]]]] - [21] [SAMP(HTTP)[Content-Script-Type: application/x-javascript; charset=[[euc-jp]]]] [[#comment]] * メモ [3] 構文についての考察は [[Content-Style-Type:]] 欄の説明をご覧下さい。 欄の名前と値の適用対象が違う (スタイルではなくスクリプト) のと、 '''[CODE[Content-Script-Type:]] には既定値がない'''以外は同じです。 (既定のスクリプト言語については、 [[script]] 要素の説明を参照。) [4] 値については、[[スクリプトの媒体型]]をご覧下さい。 [5] なお、 [[M$]] 独自拡張の [[HTML]] 仕様においては、殆ど全ての要素に [[language]] 属性が存在します。この定義は [CODE[script]] 要素の同属性と同じですが、当該要素の属性である on[VAR[〜]] 属性の解釈に影響します。この属性値が継承されるのかは知りません。 [6] on[VAR[〜]] 属性そのものが[[非推奨]]なので、この欄もいずれ使われなくなるかもしれません。 - [22] この欄の欄本体は[[媒体型]]ですが、媒体型の [CODE(MIME)[[[charset]]]] 引数は省略することが慣習となっています。 (そもそも、やや狭義媒体型だけが許されるのか、引数も許されるのか規格上曖昧なのですけど、型によっては必須の引数もあるので、やや狭義媒体型しか指定できないとしたら欠陥規格です。) - [23] [CODE(MIME)[charset]] 引数が省略された場合、 [CODE[Content-Type]] 欄であれば [[MIME]] なら [CODE(charset)[[[us-ascii]]]], [[HTTP]] では [CODE(charset)[[[iso-8859-1]]]] なのですけど、 [CODE(HTTP)[Content-Script-Type]] (や [CODE(HTTP)[Content-Style-Type]]) では既定値は「指定なし」です。この欄の用途は >>1 なのですが、つまり既に構文解析された HTML 文書の一部に [ABBR[CST]] が適用されるということです。つまり charset は意味を成さないのです。 - [24] とはいっても、 >>21 のような実例も確認されています。 >>23 の解釈は慣習的なものでしかないので、 >>14 も >>21 も間違いとはいえません。 [WEAK[(但し、 [CODE(MIME)[application/x-javascript]] の定義上 [CODE(MIME)[charset]] 引数の存在が意味を持つかという話もありますが、とりあえずその話は置いておきましょう。)]] [[#comment]] - [12] [[XUL]] とか [[XBL]] でも使えそうかなあ・・と思ったけど、 [[Mozilla]] は単に決め打ちしてるだけだしなあ。 - [13] 結局、使われない欄なんだろうなあ。 [[Strict]] 志向の人って script 属性なんてつかわなそうだし。 [37] [CITE@ja[DUOGATE デュオゲート - 地図・乗換]] ([CODE[2007-07-04 19:53:31 +09:00]] 版) > [PRE(HTML invalid example code)[ ]PRE] ([[名無しさん]]) [38] [CITE@ja[無料動画:映画、海外ドラマ、アニメほか|パソコンテレビGyaO[ギャオ]]] ([CODE[2007-07-04 20:19:06 +09:00]] 版) > [PRE(HTML invalid example code)[ ]PRE] ([[名無しさん]]) [39] [CITE@ja[無料動画:映画、海外ドラマ、アニメほか|パソコンテレビGyaO[ギャオ]]] ([TIME[2007-07-04 20:19:06 +09:00]] 版) > [PRE(HTML invalid example code)[ ]PRE] ([[名無しさん]])