web-dev-qa-db-ja.com

mimeタイプがサーバーによって設定されているときに、なぜ<script type = "text / javascript">と書くのですか?

私の理解では、MIMEタイプはWebサーバーによって設定されます。 type="text/javascriptまたはtype="text/css"属性を追加する理由これは役に立たない無視された属性ではありませんか?

63

ダグラス・クロックフォードは言う

type="text/javascript"

この属性はオプションです。 Netscape 2以降、すべてのブラウザーのデフォルトのプログラミング言語はJavaScriptです。 XHTMLでは、この属性は必須であり不要です。 HTMLでは、それを省いた方が良いでしょう。ブラウザは何をすべきかを知っています。

彼はまた言う:

W3Cはlanguage属性を採用せず、代わりにMIMEタイプをとるtype属性を優先しました。残念ながら、MIMEタイプは標準化されていないため、時々"text/javascript" または "application/ecmascript" または、他の何か。幸いなことに、すべてのブラウザは常にデフォルトのプログラミング言語としてJavaScriptを選択するため、常に<script>。それは最小であり、ほとんどのブラウザで動作します。

娯楽のみを目的として、次の5つのスクリプトを試しました

  <script type="application/ecmascript">alert("1");</script>
  <script type="text/javascript">alert("2");</script>
  <script type="baloney">alert("3");</script>
  <script type="">alert("4");</script>
  <script >alert("5");</script>

Chromeでは、スクリプト3(type="baloney")働いた。 IE8はスクリプト1(type="application/ecmascript")またはscript 3. 2つのブラウザーの広範なサンプルに基づくと、type属性を安全に無視できるように見えますが、それを使用する場合は正当な(ブラウザー依存の)値を使用する方が適切です。

66
brainjam

少なくともHTML 4.01およびXHTML 1(.1)では、<script>要素のtype属性は required であるため。

HTML 5 では、typeは不要になりました。

実際、HTMLソースでtext/javascriptを使用する必要がありますが、多くのサーバーはContent-type: application/javascriptでファイルを送信します。これらのMIMEタイプの詳細については、 RFC 4329 を参照してください。

text/javascriptを廃止としてマークし、application/javascriptの使用を推奨しているRFC 4329と、一部のブラウザーが<script>を含むtype="application/javascript"要素に驚いている現実との違いに注意してください。送信されるファイルのHTTP Content-typeヘッダーではなく、HTMLソースで)。最近、この矛盾についてWHATWGメーリングリストで議論がありました(HTML 5のtypetext/javascriptにデフォルト設定されています)。これらのメッセージを件名 で読みますRFC 4329?

28
Marcel Korpel

http://lists.w3.org/Archives/Public/public-html/2009Apr/0195.html で提供されているボリス・ズバルスキー(Mozilla) = Geckoベースのブラウザが行うことを説明するために以下に繰り返される擬似コード:

if (@type not set or empty) {
   if (@language not set or empty) {
     // Treat as default script language; what this is depends on the
     // content-script-type HTTP header or equivalent META tag
   } else {
     if (@language is one of "javascript", "livescript", "mocha",
                             "javascript1.0", "javascript1.1",
                             "javascript1.2", "javascript1.3",
                             "javascript1.4", "javascript1.5",
                             "javascript1.6", "javascript1.7",
                             "javascript1.8") {
       // Treat as javascript
     } else {
       // Treat as unknown script language; do not execute
     }
   }
} else {
   if (@type is one of "text/javascript", "text/ecmascript",
                       "application/javascript",
                       "application/ecmascript",
                       "application/x-javascript") {
     // Treat as javascript
   } else {
     // Treat as specified (e.g. if pyxpcom is installed and
     // python script is allowed in this context and the type
     // is one that the python runtime claims to handle, use that).
     // If we don't have a runtime for this type, do not execute.
   }
}
13
Alohci

ブラウザは、スクリプトまたはスタイルシートを要求する前に、スクリプト/スタイル言語を処理できるかどうかを判断できます(または、埋め込みスクリプト/スタイルの場合は、使用されている言語を識別します)。

ブラウザー空間で言語間の競争が激化した場合、これははるかに重要になりますが、VBScriptはIEを超えて、PerlScriptはIE =特定のプラグインですが、JSSSはそもそもかなりゴミでした。

HTML5のドラフトでは、属性をオプションにします。

5
Quentin