[52] [[HTML]] では、 [CODE(HTMLe)[[[script]]]] 要素を使って任意の[[スクリプト言語]]で書かれたコードを関連付けることができます。 他にもスクリプト言語を組入れることのできるマーク言語やスクリプトと関係するプロトコルなどがいくつも存在します。 このような仕組みには、特定のスクリプト言語に依存しているものもあれば、 任意のスクリプト言語を (少なくても枠組みとしては) 利用可能なものもあります。 HTML は後者に該当します。後者の場合は、必然的にスクリプト言語を識別する仕組みが必要となります。 この文書では、このスクリプト言語を識別するための仕組み (その中でも特に、判定方法よりも識別子的プロトコル要素) について扱います。文書名は[CITE[スクリプトの媒体型]]ですが、 [[媒体型]] (インターネット媒体型) はそのような識別子の一種です。 しかし、ここでは媒体型に限らず、様々な方法に触れます。 また、[Q[スクリプト]]と一般に呼ばれるものの範囲を少々逸脱していても、 スクリプトを汎用的に扱う仕組みの中で処理されることがあるものであれば、 同様に扱うこととします。 ;; [107] [CODE(HTMLe)@en[[[script]]]] [[要素]]の項もご覧ください。 * スクリプトの種類を識別するプロトコル要素 ** インターネット媒体型 [53] [DFN[[[媒体型]]]]は、 [[MIME]] で[[実体]]の書式を識別するために考案された識別子で、 後に [[Web]] でも種類の標準的な識別子として取入れられました。 そして、 [[HTML 4]] は [CODE(HTMLe)[script]] 要素の [CODE(HTMLa)[type]] 属性でスクリプトの種類の指定のために媒体型を採用しています。 [2] [[HTML]] に埋め込まれて使うような類の[[スクリプト]]の Internet [[媒体型]]は、大抵 [[IANAREG]] に載ってません。 そのせいもあって色んな指定が溢れています。 [[#comment]] ** language 属性の識別子 [54] HTML の [CODE(HTMLe)[script]] 要素は、当初は [CODE(HTMLa)[language]] 属性によってスクリプト言語を識別していました。この識別子は、 単純な文字列であり、名前の標準化・登録や名前空間、 スクリプト言語の版などのための仕組みは用意されませんでした。 HTML 4 は媒体型を使う [CODE(HTMLa)[type]] 属性を導入し、 [CODE(HTMLa)[language]] 属性は非推奨としています。そのため、 [CODE(HTMLa)[language]] 属性由来の識別子が今後広く使われることはないでしょう。 [14] [[HTML 4]] でも''非推奨''ながら [CODE(HTMLa)[language]] 属性は存在します。ないと誤解している文書があるようですので。 [[#comment]] ** OpenDocument text:script 要素 script:language 属性 [97] [[OpenDocument]] 1.0 の [CODE(XMLe)@en[text:[[script]]]] [[要素]]は、 [[スクリプト]]の種類を [CODE(XMLa)@en[script:[[language]]]] [[属性]]で示すことになっています。 ただし、例として「JavaScript」が挙げられている以外、何も説明がありません。 (6.6.6 節) ** メモ [[#comment]] * スクリプトの種類を指定するプロトコル要素 ** script 要素 type 属性 (HTML, XHTML 1, XBL) [35] [[HTML]] の [CODE(HTMLe)[[[script]]]] 要素の [DFN[[CODE(HTMLa)[type]] 属性]]は、その [CODE(HTMLe)[script]] 要素の内容の言語を指定します。 [24] [[XBL]] での [CODE(XMLe)[[[script]]]] 要素の定義は、仕様書によれば HTML 4 と同じです。 (でも意図としては [[XHTML 1]] と同じ、だと思います。) [36] 仕様書: - [[HTML 4]] -- [CODE(HTMLe)[script]] 要素 [CODE(HTMLa)[type]] 属性 -- [CITE[18.2.2 Specifying the scripting language]] - [32] [Microsoft] -- [CITE[TYPE Attribute | type Property (SCRIPT)]] [70] [CITE[IHTMLScriptElement::type Property (Internet Explorer)]] ([[名無しさん]] [sage]) [[#comment]] *** 属性値 [37] この属性の値は [CODE(SGML)[%[[ContentType]]]] です。 [[SGML]] 的には [CODE(SGML)[[[CDATA]]]] です。 [38] この属性は必須です。省略することはできません。 [[#comment]] *** 他との関係 [39] [CODE(HTMLe)[script]] 要素のスクリプト言語の指定には、 [CODE(HTMLa)[language]] 属性も使えます。元々はそちらが使われていましたが、 [[HTML 4]] ではこれを非推奨とし、代わりに [CODE(HTMLa)[type]] 属性を必須としています。 [[#comment]] *** 実装 [40] [CODE(HTMLe)[script]] 要素を知っている実装でも、古いものは [CODE(HTMLa)[language]] 属性にしか対応しておらず、 [CODE(HTMLa)[type]] 属性による指定は無視されてしまいました。 そのため、両方の属性を指定することが好ましいと言われていたこともありました。 (現在では [CODE(HTMLa)[type]] 属性を知らない実装は死滅していると考えられています。) また、ほとんど (すべて?) の実装は、 [CODE(HTMLa)[type]] 属性も [CODE(HTMLa)[language]] 属性の両方ともが指定されていない場合には [[JavaScript]] で書かれていると解釈します ([CODE(HTTP)[[[Content-Style-Type]]]] を継承するものもあるかもしれません)。 [41] [CODE(HTMLa)[type]] 属性と [CODE(HTMLa)[language]] 属性が矛盾しているときの UA の挙動は規定されていません。 [CODE(HTMLa)[type]] 属性を優先させるものが多いように思われます。 [62] [[Mozilla]] 1.3a では、 [SAMP(HTML)[ ]PRE] この文書の既定の言語は [[Tcl]] ですが、 [CODE(HTMLe)[head]] 内の外部スクリプトは [[VBScript]], [CODE(HTMLe)[body]] 内の埋込み (内部) スクリプトは [[JavaScript]] で書かれています。 [[#comment]] *** メモ [61] [CODE(HTMLa)[type]] の適用対象は[Q[内容]]とされており、 外部スクリプトには適用されないように思えますが、 >>60 の例より適用されると考えられます。 もっとも、外部スクリプトの場合は他の要素の [CODE(HTMLa)[[[type]]]] 属性同様に、属性値はヒント程度で、実際には外部資源の [CODE(MIME)[[[Content-Type]]]] に拠って処理するのが適当と考えられます。 [[#comment]] ** スクリプト系要素の type 属性 (XBL) [43] その要素又は子孫の内容であるスクリプト言語を示します。 省略可能で既定値はありません。 - [[implemention]] ☆ -- [[method]] ☆ --- [[parameter]] @ --- [[body]] @ -- [[property]] ☆ --- [[getter]] ☆ @ --- [[setter]] ☆ @ - [[handlers]] ☆ -- [[handler]] ☆ @ [CODE[☆]] の要素には、 [CODE(XBL)[type]] 属性が存在します。 [CODE[@]] の要素は、その内容がスクリプトです。 ある要素で [CODE(XBL)[type]] 属性の値が無い場合、親要素の値が継承されます。 [44] 仕様書 (>>45) では値の例として [CODE(MIME)[text/javascript]] が挙がっています。 [[Mozilla]] では他に [CODE(MIME)[application/x-javascript]] が使われています。しかし、値が指定されていない XBL 文書もあります。 Mozilla では [[JavaScript]] を既定値とみなしているようです (というか他の言語に対応していないし)。 実のところ仕様書にある例も [CODE(XMLa)[type]] 属性が無かったりします。 [CODE(XMLa)[type]] 属性が無い場合 [[HTTP]] サーバーでは [CODE(HTTP)[[[Content-Script-Type]]:]] 欄を供給するのが良いかもしれません。 - [45] ''XBL - XML Binding Language'' -- [CODE(XMLe)[implemention]] 要素 -- [CODE(XMLe)[method]] 要素 -- [CODE(XMLe)[property]] -- [CODE(XMLe)[getter]] -- [CODE(XMLe)[setter]] -- [CODE(XMLe)[handlers]] -- [CODE(XMLe)[handler]] [[#comment]] ** Content-Script-Type: 頭欄 (HTTP) [46] [CODE(HTTP)[[[Content-Script-Type]]:]] 欄の説明をご覧ください。 ** language 属性 (HTML 4, XHTML 1) [55] [[HTML]] の [CODE(HTMLe)[[[script]]]] 要素の [DFN[[CODE(HTMLa)[language]]]] 属性]]は、その要素の内容の[[スクリプト言語]]を指定します。 [57] [[WinIE]] では任意の要素に指定できて、 [[内在事象取扱器]]属性に適用されます。 [56] 仕様書: - [[HTML 4]] -- [CODE(HTMLe)[script]] 要素 [CODE(HTMLa)[language]] 属性 - [31] [Microsoft] -- [CITE[LANGUAGE Attribute | language Property (A, ACRONYM, ADDRESS, ...)]] [69] [CITE[IHTMLElement::language Property (Internet Explorer - DHTML)]] ([[名無しさん]] [sage]) [[#comment]] *** 代替 [58] この属性は非推奨です [SRC[HTML 4]]。 代わりに、 [CODE(HTMLa)[type]] 属性が利用できます。 [[#comment]] *** 属性値 [3] この属性の値は [CODE(SGML)[[[CDATA]]]] で、 大文字・小文字を区別しません。スクリプト言語の識別子ですが、 標準化されておらず、 [CODE(HTMLa)[type]] 属性があるので非推奨とされています。 [SRC[HTML 4]] [5] [[M$DN]] によると [CODE(HTMLa)[language]] 属性の値には [Q[[[.NET]] と互換性のある全ての言語を指定できます]]。 [59] この属性は省略可能です。省略時については [CODE(HTMLa)[type]] 属性の説明をご覧ください。 [[#comment]] *** メモ [76] [CODE(HTML example)@en[JavaScript 1.8]]: 存在しない版、版番号の前の [CODE(charname)@en[[[SPACE]]]] ([[名無しさん]] [sage]) [95] [CITE[中時部落格-回頭是岸]] ([CODE[2008-06-08 22:24:53 +09:00]] 版) > [PRE(HTML invalid example code)[ ]PRE] ([[名無しさん]]) [[#comment]] ** メモ [65] [CITE[DTV A S E L 1 (DASE-1) P 2: D A E ATSC Standard]] の規定する HTML の一種は、既定のスクリプト言語の決定に HTTP 頭欄を使わず、 [CODE(HTMLe)[meta]] 要素の [CODE(HTMLa)[[[name]]]] 属性の値が [CODE[Content-Script-Type]] であるものを使います。その [CODE(HTMLa)[[[content]]]] 属性の値は[[媒体型]]です。省略時の既定値は [CODE(MIME)[text/ecmascript]] です。 [SRC[5.1.1.6.7.1 Default Script Content Type]] ([[名無しさん]] [sage]) [[#comment]] * 実際に見られる識別子の値 [42] 現実に何らかの仕様書で規定・例示されていたり、 実装が存在していたり、使用している文書が存在していたりする具体的な識別子の値として知られているものを次に言語ごとに紹介します。 [[#comment]] ** ECMAScript 系 (JavaScript, JScript など) [12] '''媒体型''': [CODE(MIME)[[[application/x-javascript]]]], [CODE(MIME)[[[text/javascript]]]] などがあります。 詳しくは [[JavaScript関係の媒体型]]をご覧ください。 [13] '''[CODE(HTMLa)[language]] 属性''': - (無指定) (NN2+, WinIE3+) - [CODE(HTML)[LiveScript]] (NN2+, WinIE3+) - [CODE(HTML)[JavaScript]] (NN2+, WinIE3+) - [CODE(HTML)[JavaScript1.0]] (? Moz 1.3a) -- [14] 新しい版との対称性のため後から追加されたようです。 - [CODE(HTML)[JavaScript1.1]] (NN3+, WinIE4+) - [CODE(HTML)[JavaScript1.2]] (NN4+, WinIE4+) - [CODE(HTML)[JavaScript1.3]] (NN4.06+, WinIE5+) - [CODE(HTML)[JavaScript1.4]] (NN6+) - [CODE(HTML)[JavaScript1.5]] (NN6+) - [CODE(HTML)[JScript]] (WinIE4+) - [17] [CODE(HTML)[ECMAScript]] (? WinIE6) [47] '''拡張子''': [CODE(file)[.js]] がよく使われます。 参考文献: - [15] ''スクリプトバージョンのチェック'' -- 実際にお使いの [[UA]] で確認出来ます。良頁。 - [16] ''JavaScript Script Tag and Language Acceptance'' - [[ScriptTest]] - [26] ''DOM Sample - Script Tag'' ** VBScript [18] '''媒体型''': - [CODE(MIME)[[[text/vbs]]]] - [CODE(MIME)[[[text/vbscript]]]] (WinIE3+, HTML 4 仕様書に例あり) - [CODE(MIME)[[[text/x-vbscript]]]] ( に例あり) - [CODE(MIME)[[[application/x-vbscript]]]] [19] '''[CODE(HTMLa)[language]] 属性''': - [CODE(HTML)[VBScript]] (WinIE3+) - [CODE(HTML)[VBS]] (WinIE3+) - [1] [CODE(HTML)[VB]] ([[M$DN]] とかにあるが WinIE 未対応。) [48] '''拡張子''': [CODE(file)[.vbs]] が良く使われます。 [[#comment]] ** PerlScript [49] [Q[PerlScript]] は [[ActiveScript]] 機能により WinIE などから利用できる [[Perl]] です。 [[ActivePerl]] (Win32 向けの Perl 配布) の一機能となっています。 [20] '''媒体型''': - [CODE(MIME)[[[text/perlscript]]]] (ActivePerl) - [CODE(MIME)[[[application/x-perlscript]]]] - [CODE(MIME)[[[[text/x-perl]]]] ( に例あり) [6] '''[CODE(HTMLa)[language]] 属性''': - [CODE(HTML)[PerlScript]] [50] 参考: PerlScript でない一般の [[Perl]] script・module 等には [CODE(MIME)[[[application/x-perl-script]]]], [CODE(MIME)[[[application/x-perl]]]] が使われています。 [[#comment]] * TCL [21] '''媒体型''': - [CODE(MIME)[[[text/tcl]]]] (HTML 4 仕様書に例あり) - [27] [CODE(MIME)[[[[text/x-tcl]]]] [[#comment]] * RubyScript [51] [Q[RubyScript]] は [[ActiveScript]] によって [[WinIE]] などで使うことができる [[Ruby]] で、 [[ActiveRubyScript]] というプログラムにより実装されています。 [10] '''媒体型''': - [CODE(MIME)[[[text/rubyscript]]]] [11] '''[CODE(HTMLa)[language]] 属性''': - [CODE(HTML)[RubyScript]] (ActiveRubyScript) [[#comment]] * C# [4] '''[CODE(HTMLa)[language]] 属性''': - [CODE(HTML)[C#]] 普通は生の HTML 文書ではなく、 [[ASP]] などで使われます。 [[#comment]] * Cache' [7] '''[CODE[language]] 属性''': - [CODE(HTML)[Cache]] ([[CSP]] ([CITE[技術サポート]] 参照。)) 生の HTML 文書ではなく、 [[CSP]] で使われます。 [[#comment]] * SQL [25] '''[CODE(HTMLa)[language]] 属性''': - [CODE(HTML)[SQL]] ([[CSP]] ([CITE[技術サポート]] 参照。)) Script なのか? という気はしないでもないですが。 [[#comment]] * COBOL [8] '''[CODE(HTMLa)[language]] 属性''': - [CODE(HTML)[COBOL]] ([[NetCOBOL]] ([[.NET]] 化した [[COBOL]]) 用) [9] >>8 そこまでするか COBOLer って感じですが。 [[#comment]] * XML Data Island [28] '''[CODE(HTML)[language]] 属性''': - [CODE(HTML)[xml]] [29] '''[[媒体型]]''': - [CODE(MIME)[[[text/xml]]]] [33] [[XML Data Island]] によるデータ・スクリプトならしいです。 凡人には理解できない [[M$]] 独自技術です。 独自技術に勝手に標準技術の名前を使うところがまた M$ らしい。 >>31 によれば [[WinIE]] 5 以上が対応しています。 参考文献: - [30] [CITE[Concepts]] [[#comment]] ** Python [34] '''[CODE(HTMLa)[language]] 属性''': - [CODE(HTML)[Python]] [67] [CODE(MIME)[[[application/x-python]]]] で [[Python]] を使えるようにしようという話 [CITE[Programming languages]] ([[名無しさん]]) [80] [CITE@en[PyDOM - MDC]] ([CODE[2006-10-06 05:32:56 +09:00]] 版) ([[名無しさん]]) [[#comment]] ** メモ [66] PHP language=php (鯖側処理) ([[名無しさん]] [sage]) [68] [CITE[Bug 62485 - script type="text/ecmascript" is not recognized]] ([[名無しさん]] [sage]) [71] [SAMP(HTML)[language=JScript.Encode]]、 [SAMP(HTML)[language=VBScript.Encode]] 他の [[ActiveScript]] でも使えるんだろうか? ([[名無しさん]] [sage]) [[#comment]] * メモ [72] [CITE@en[X3D Specification, ISO/IEC 19775-2:200x, Part 2, Annex A VRML97 Scripting Backwards Compatibility]] [[X3D]] で [[VRML]] と互換性を保つための[[媒体型]]として [CODE(MIME)@en[[[application/javascript]]]] と [CODE(MIME)@en[[[application/x-javascript]]]] が規定されています。 ([[名無しさん]] [sage]) [73] で、新しい [[X3D]] 用のは [CODE(MIME)@en[[[application/ecmascript]]]] と [CODE(MIME)@en[[[application/x-ecmascript]]]] ([[名無しさん]] [sage]) [74] >>73 の規定は [CITE@en[ISO/IEC 19777-1:2005 -- X3D ECMAScript binding -- 4 Concepts]] ([[名無しさん]] [sage]) [75] [CITE@en[ISO/IEC 19777-1:2005 -- X3D ECMAScript binding -- 4 Concepts]] ([[名無しさん]] [sage]) [77] [CITE[products and projects]] [CODE(MIME)@en[[[text/tiscript]]]] ([[名無しさん]]) [81] [CITE[Dustin Long's homepage]] ([CODE[2007-04-14 09:27:31 +09:00]] 版) > language="text/common-lisp" (まま) ([[名無しさん]] [WEAK[2007-04-14 00:31:28 +00:00]]) [82] [CITE@en[Mike Harsh's Blog : WPF/E Code Walkthrough]] ([CODE[2007-05-05 11:14:45 +09:00]] 版) [CODE(MIME)@en[[[text/xaml]]]] ([[名無しさん]]) [83] >>82 [[XMLデータ島]]やるために [CODE(HTMLe)@en[[[script]]]] を使うというのは、ものすごく時代に逆行していますね。 [[Shaping the Future of HTML]] Workshop を思い起こしますw ([[名無しさん]] [WEAK[2007-05-05 02:23:16 +00:00]]) [84] [[type]]=[[text/xml-script]] ([[名無しさん]]) [85] [CITE[seamonkey mozilla/content/base/src/nsScriptLoader.cpp]] ([CODE[2007-07-08 17:10:21 +09:00]] 版) ([[名無しさん]]) [86] [CITE[Bug 255895 – JS1.2 must die (was: Page with menus looks good in milestones and older releases; fails with recent nightlies)]] ([CODE[2007-07-25 22:11:02 +09:00]] 版) ([[名無しさん]]) [87] [CITE[Bug 62485 – script type="text/ecmascript" is not recognized]] ([CODE[2007-07-25 22:05:45 +09:00]] 版) ([[名無しさん]]) [88] [CITE[Bug 62485 – script type="text/ecmascript" is not recognized]] ([CODE[2007-07-25 22:05:45 +09:00]] 版) ([[名無しさん]]) [89] [CITE[Bug 62485 – script type="text/ecmascript" is not recognized]] ([CODE[2007-07-25 22:05:45 +09:00]] 版) ([[名無しさん]]) [90] [CITE[理想の結婚相手をみつけよう!【無料パートナー検索】]] ([CODE[2007-10-21 20:42:53 +09:00]] 版) > [PRE(HTML bad example code)[