<script>タグでtext / javascriptを指定する必要がありますか?


157

私はどこかで読んだあなたのような不要になったものtype="text/javascript"と奇妙なCDATA<!--スクリプトタグで物事。したがって、代わりに:

<script type="text/javascript">
//<![CDATA[
<!--

    //your script here

-->
//]]>
</script>

あなたはただやるでしょう:

<script>
    //your script here
</script>

どこで読んだか覚えてないけど。それは私が思うグーグルまたはヤフーのエンジニアからのものであり、彼らは具体的にどのブラウザがこれらの古風な構造を必要とし、そしてその理由を述べた。誰もがこれについて話されているブログ記事/記事を知っていますか、またはこれについて話している良いリソースを持っていますか?


新しいブラウザー用ですが、古いブラウザー(まだ存在する場合)では、<!-->が必要です。一部のアプリのタイプについては、省略されていない場合、正しいものが必要です。
バクダン

1
CDATAについてグッド読み取り:stackoverflow.com/questions/66837/...
カパ

1
text/javascript指定したファイルを開くたびに削除します。それはノイズです。
マフィンマン

HTML5ガイドラインに関する最新情報が承認された回答に含まれている、非常に関連性の高い投稿です
RBT 2017

回答:


135

タグに関するCrockfordの記事を<script>ご覧ください。

<!-- //-->スクリプトでハックを使用しないでください。これは、第1世代のブラウザであるNetscape 1とMosaicでスクリプトがテキストとして表示されないようにするためのものです。長年必要ではありませんでした。<!-- //-->HTMLコメントを通知することになっています。コメントは、コンパイルして実行するのではなく、無視してください。また、HTMLコメントにはを含めない--ため、減分するスクリプトにはHTMLエラーがあります。

...

type="text/javascript"

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


75
必要不必要?何か不足していますか?
イズカタ、2013年

17
@Izkata、検証に必要ですが、効果はありません。
bdukes 2013年

14
「ブラウザは何をすべきかを知っています」...今のところ。来週、RubyScript(私はこれを例として作成しました)が普及し、誰もがそれを採用するためにズボンをクラップします。これは、人々に自分のファイルに「_new」という名前を付けさせ、他の人々を何年も混乱させる、同じような近視眼的な考え方です。「_new」ですか?または「_new_new」?または「_newer」?IMOそれは近視眼的です。
スロバウム2013

18
@ Slobaum、HTML5仕様では、JavaScriptがデフォルトであると記載されています。新しいスクリプトタイプがある場合、仕様からのデフォルトをサポートする新しいブラウザバージョンでのみ実装されます。
bdukes 2013

8
場合RubyScriptの人気になり、それが中に終了する.rbscriptと、ブラウザはそれに応じて行動します。
Kirk Strobeck 2013年

45

これはクロックフォードの推奨事項です。他の場所でエコーされたのを見たことがあると思います(ppkか?)。HTML5仕様では必要ありません。

奇妙なことに、「type」属性を使用して、評価したくないブロックをマークすることは、いくぶん奨励的になっ<script>ています。

<script type='text/html-template'>
  <div> this is a template </div>
</script>

奇妙な非JavaScriptタイプを指定することにより、他のJavaScriptコード(おそらく評価可能なスクリプトブロック内にある)で使用するために、ページに生のテキストを詰め込む方法が得られます。


完全に理解できません。説明してください、何がtype="text/html"意味するのか、何が意味するのかtext/javascript..ありがとう
T.Todua

4
@tazotodua「text / html」が何を意味するかはそれほど重要ではありません。重要なのは、それが「テキスト/ JavaScript」ではないことです。ブラウザは<script>ブロックの内容を完全に無視します。しかし、<script> しますので、他のJavaScriptコードがそれらを見つけると、その内容を抽出することができ、DOMの一部となります。
2016

それは興味深いハックです。しかし、私がそれを何に使うのかわからない。
brennanyoung

2
w3schoolsIn HTML5, the type attribute is no longer required for JavaScript. The default value is "application/javascript".
Amin Soheyli

19

HTML5はを必要としませんtype="text/javascript"(これがデフォルトです)。

CDATA スクリプトにHTML文字( '<'や '>'など)が含まれている場合、XHTMLページにのみ必要です。

<!-- 古いブラウザでのみ必要です。


3

まあ、私はその誰もが使用していないと言うように誘惑していますtext/javascript確かに、...これ以上、さらに縮小ツールは、おそらくそれを削除することをFacebookのSDKドキュメントだけを指定<script>

ただし、 Google SDKのドキュメントにはまだがありtext/javascriptます。

Amazon SDKのドキュメントにはまだがありtext/javascriptます。

Linkedin APIドキュメントにはまだありtext/javascriptます。

Instagramはまだ使用していtext/javascriptます。


3

タイプ属性は、script要素内に埋め込ままたは要素のsrc属性によって参照コードのスクリプト言語を識別します。これはMIMEタイプとして指定されます。サポートされるMIMEタイプの例には、text / javascript、text / ecmascript、application / javascript、application / ecmascriptがあります。

よるHTML 4.01の仕様

タイプ属性は、要素の内容のスクリプト言語を指定すると、デフォルトのスクリプト言語を上書きします。スクリプト言語はコンテンツタイプとして指定されます(たとえば、「text / javascript」)。著者は、この属性の値を提供する必要があります。この属性にはデフォルト値はありません。

ただし、HTML5では text/javascriptデフォルトのタイプなので、省略できます

タイプ属性は、データのスクリプトまたは形式の言語を提供します。属性が存在する場合、その値は有効なMIMEタイプである必要があります。charsetパラメータは指定しないでください。属性が存在しない場合に使用されるデフォルトは「text / javascript」です。


1
言い換えると、HTML5をサポートしていない古いブラウザでエラーが発生する可能性があります
Serge

2

HTML5のスクリプトはデフォルトでtext / javascriptに自動的に設定されるという依存関係があるため、この記事をここで考えているかもしれませんが、HTML5以外のブラウザでは、ほとんど常にテキスト/ javascriptを推測しますが、仕様どおりにタイプを定義する必要があります。


1

属性scriptではなく、ヘッダーに基づいてブロックを正しく解釈するかどうかはブラウザー次第typeです。だからあなたの質問に答えるために、それは現代のブラウザには必要ありません(私はIE7 +、FF、Webkitを話しています)。それより古いブラウザをサポートしている場合...ごめんなさい=)


2
3億5,000万を超えるユーザーを抱える中国を忘れないでください。その多くはまだIE6を使用しています。netmarketshare.com/...
chainwork

3
中国の厳格なインターネットポリシーを知っていると、サイトに
アクセスできない

質問はインラインスクリプトに関するものであるため、メインページ(一部のHTMLコンテンツタイプ)以外にヘッダーはありません。とにかく、ブラウザーがヘッダーを考慮することを示すソースがありますか(たとえば、プレーンな<script src = "something"> </ script>があり、VBScriptヘッダーを提供している場合、それをVBScriptとして解釈するブラウザーはありますか) ?
Matthew Flaschen 14

1

SVG内にスクリプトタグを配置する場合、type属性を指定する必要あります。そして、それはで"text/ecmascript"はないはずです"text/javascript"

スクリプトがインライン(リンクされていない)の場合は、スクリプトの本体もCDATA宣言でラップする必要があります。したがって、SVG(およびその他のXMLバリアント)のインラインスクリプトのボイラープレートは

<script type="text/ecmascript">
<![CDATA[
// your javascript code goes here
]]>
</script>

これらは「実際のところ」特別なケースかもしれませんが、十分に現実的であり、SVGの使用が増加しているため、タイプ属性とCDATAが最新のブラウザーでは完全に廃止されていると他の人が示唆するのは誤りです。ユースケースは狭いですが、前代未聞ではありません。

「環境をその反対に変えれば、すべての知恵が愚かさの中で最悪になります。」-アシュビー


1
よかった。ちょうどいくつかの複雑なSVGに取り組んでいて、これは確かにそうです!
Dave Everitt

1

👉🏻HTML5 仕様では、冗長なMIMEタイプを提供するのではなく、属性を省略することを作成者に求めています。 MDN

MIMEスニッフィング標準は、 JavaScriptが任意のMIMEタイプ(使用して提供することができます多目的インターネットメール拡張以下にマッチします):

<script type="application/javascript"></script>
<script type="application/ecmascript"></script>

<script type="text/javascript"></script>
<script type="text/ecmascript"></script>

0

ええと、text / javascriptなしでさらに多くの例を見続けていますが、何らかの理由で、そうするとスクリプトがFFで機能しなくなります。text / javascript宣言を維持することをお勧めします。CDATAタグを使用すると、ブラウザーでJavaScriptがオフになっている場合に、JavaScriptがWebサイトでプレーンテキストとして表示されなくなります。個人的に私はこれらのタグをもう使用していません。そこにユーザーがたくさんいないと思いません。彼らがそこにいるのなら、彼らは頭を伸ばしたいと思うかもしれません:P


本当にアンティークなブラウザをターゲットにしたいのでない限り、type属性も古いCDATAも必要ありません。ただし、実際に正しいタイプを使用している限り、問題はありません。
とがった

私は最新の安定したFFリリースを使用しており、text / javascriptの宣言がないと解析に問題があるようです。jQueryを使用していますが、違いはありません。
Michael

まあ<script>、単純な"言語"も "タイプ"もないスクリプトタグを使用してWebアプリケーション全体を実行すると、すべてのブラウザーで正常に動作します。(まあ、すべての合理的なもの:FF、Chrome、Safari、IE、Opera。)
Pointy

1
@pointyは、FatherStormがなぜこれが起こっているのかについての回答を投稿したようです。あなたのコメントは間違っているようです。
Michael

@Michael XHTML / Strictで間違えた場合に問題が発生する可能性がありますが、それでも私はそれを疑っています。JavaScriptの世界の著名人の間では、「type」属性は不要であるという一般的な合意があります。実際、悪い「type」はスクリプトを壊すため、それは単なるバグの原因です。
ポインティ

0

type="text/javascript" :HTML 4およびXHTMLでは必須ですが、HTML5ではオプションです。

CDATA :XHTMLでは必須です。

<!--:非常に古いブラウザからJavaScriptを隠すために使用されます。例:Netscape 1とInternet Explorer2。どちらも使用していません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.