Benötigen Sie Text / Javascript, der in Ihren <script> -Tags angegeben ist?


156

Ich habe irgendwo gelesen, dass Sie Dinge wie type="text/javascript"und das Seltsame CDATAund <!--Dinge in Ihren Skript-Tags nicht mehr brauchen . Also statt:

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

    //your script here

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

Sie würden einfach tun:

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

Ich kann mich nicht erinnern, wo ich das gelesen habe. Ich glaube, es war von einem Google- oder Yahoo-Ingenieur, und sie erwähnten ausdrücklich, welche Browser diese archaischen Konstrukte benötigten und warum. Weiß jemand, über welchen Blog-Beitrag / Artikel hier gesprochen wurde, oder hat eine gute Ressource, die darüber spricht?


Für neue Browser, aber für ältere (falls noch vorhanden) wird <! - -> benötigt. Über den Typ in einigen Apps, wenn nicht weggelassen, braucht man den richtigen.
Bakudan

1
Gut gelesen über CDATA: stackoverflow.com/questions/66837/…
kapa

1
Jedes Mal, wenn ich eine Datei mit den text/javascriptangegebenen Angaben öffne , entferne ich sie. Es ist Lärm.
Der Muffin-Mann

Ein sehr verwandter Beitrag hier mit aktuellen Informationen zu HTML5-Richtlinien in der akzeptierten Antwort.
RBT

Antworten:


134

Siehe Crockfords Artikel auf dem <script>Tag , insbesondere:

Verwenden Sie den <!-- //-->Hack nicht mit Skripten. Es sollte verhindert werden, dass Skripte in den Browsern Netscape 1 und Mosaic der ersten Generation als Text angezeigt werden. Es ist seit vielen Jahren nicht mehr notwendig. <!-- //-->soll einen HTML-Kommentar signalisieren. Kommentare sollten ignoriert, nicht kompiliert und ausgeführt werden. Außerdem dürfen HTML-Kommentare nicht enthalten sein --, sodass ein Skript, das dekrementiert, einen HTML-Fehler aufweist.

...

type="text/javascript"

Dieses Attribut ist optional. Seit Netscape 2 ist JavaScript die Standardprogrammiersprache in allen Browsern. In XHTML ist dieses Attribut erforderlich und nicht erforderlich. In HTML ist es besser, es wegzulassen. Der Browser weiß, was zu tun ist.


75
Erforderlich und unnötig? Vermisse ich etwas
Izkata

17
@Izkata, es ist für die Validierung erforderlich, hat aber keine Auswirkung.
Bdukes

14
"Der Browser weiß, was zu tun ist" ... für jetzt. Was ist mit der nächsten Woche, wenn RubyScript (ich habe es mir als Beispiel ausgedacht) populär gemacht wird und jeder seine Hosen scheißt, um es zu übernehmen? Dies ist die gleiche Art von kurzsichtigem Denken, die Menschen dazu bringt, ihre Dateien "neu" zu nennen und andere Menschen jahrelang zu verwirren. Ist es das "Neue"? Oder "_new_new"? Oder neuer"? IMO ist es kurzsichtig.
Slobaum

17
@Slobaum, die HTML5-Spezifikation gibt an, dass standardmäßig JavaScript verwendet wird . Wenn es neue Skripttypen gibt, werden diese nur in neuen Browserversionen implementiert, die diesen Standard aus der Spezifikation unterstützen.
Bdukes

8
Wenn es RubyScriptpopulär wird, endet es in .rbscriptund der Browser handelt entsprechend.
Kirk Strobeck

45

Es ist eine Crockford- Empfehlung. Ich weiß, ich habe gesehen, dass es woanders widerhallt (ppk vielleicht?). Die HTML5-Spezifikation erfordert dies nicht.

Seltsamerweise ist es etwas selbstverständlich geworden , das Attribut "type" zu verwenden, um <script>Blöcke zu markieren , die nicht bewertet werden sollen:

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

Einen seltsamen Nicht-JavaScript - Typen Indem Sie einen Weg , um Sachen Rohtext in die Seite für die Verwendung durch anderen JavaScript - Code erhalten (die vermutlich in Skriptblock ist, der kann ausgewertet werden).


Ich kann nicht vollständig verstehen. Bitte erklären Sie, was type="text/html"bedeutet überhaupt und was text/javascriptbedeutet .. danke
T.Todua

4
@tazotodua es ist nicht wirklich sehr wichtig, was "text / html" bedeutet; Wichtig ist, dass es sich nicht um "Text / Javascript" handelt. Browser ignorieren den Inhalt des <script>Blocks vollständig . Das <script> wird jedoch Teil des DOM, sodass andere JavaScript-Codes sie finden und ihren Inhalt extrahieren können.
Pointy

Das ist ein interessanter Hack. Ich bin mir jedoch nicht sicher, wofür ich es verwenden würde.
brennanyoung

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

19

HTML5 benötigt das nicht type="text/javascript"(es ist die Standardeinstellung).

CDATA wird nur für XHTML-Seiten benötigt, wenn das Skript HTML-Zeichen (wie '<' und '>') enthält.

<!-- sollte nur für ALTE Browser benötigt werden.



3

Das type- Attribut identifiziert die Skriptsprache des Codes, der in ein Skriptelement eingebettet ist oder über das src-Attribut des Elements referenziert wird. Dies wird als MIME-Typ angegeben. Beispiele für unterstützte MIME-Typen sind Text / Javascript, Text / Ecmascript, Anwendung / Javascript und Anwendung / Ecmascript.

Gemäß HTML 4.01 Spezifikation

Das Attribut type gibt die Skriptsprache des Inhalts des Elements an und überschreibt die Standard-Skriptsprache. Die Skriptsprache wird als Inhaltstyp angegeben (z. B. "Text / Javascript"). Autoren müssen einen Wert für dieses Attribut angeben. Für dieses Attribut gibt es keinen Standardwert.

In HTML5 text/javascript ist dies jedoch der Standardtyp, sodass Sie ihn weglassen können

Das type- Attribut gibt die Sprache des Skripts oder das Format der Daten an. Wenn das Attribut vorhanden ist, muss sein Wert ein gültiger MIME-Typ sein. Der Zeichensatzparameter darf nicht angegeben werden. Die Standardeinstellung, die verwendet wird, wenn das Attribut fehlt, ist "Text / Javascript".


1
Mit anderen Worten, das Weglassen kann zu Fehlern in alten Browsern führen, die HTML5 nicht unterstützen
Serge

2

Möglicherweise denken Sie hier an diesen Artikel mit der Abhängigkeit, dass Skripte in HTML5 standardmäßig automatisch Text / Javascript verwenden, während Nicht-HTML5-Browser weiterhin erwarten, dass Sie den Typ spezifisch spezifizieren, obwohl sie fast immer Text / Javascript erraten .


1

Es liegt am Browser, den scriptBlock anhand der Überschriften und nicht anhand des typeAttributs richtig zu interpretieren . Um Ihre Frage zu beantworten, ist dies für moderne Browser nicht erforderlich (ich spreche von IE7 +, FF, Webkit). Wenn Sie ältere Browser unterstützen, tut mir das leid =)


2
Vergessen Sie nicht China mit mehr als 385 Millionen Nutzern, von denen viele immer noch IE6 verwenden. netmarketshare.com/…
Kettenarbeit

3
Wenn Sie die strengen Internetrichtlinien
Chinas kennen

Die Frage bezieht sich auf ein Inline-Skript, daher gibt es keine anderen Header als die Hauptseite (dies wäre ein HTML-Inhaltstyp). Haben Sie eine Quelle, die angibt, dass Browser die Header berücksichtigen (z. B. wenn Sie einen einfachen <script src = "Something"> </ script> haben und einen VBScript-Header bereitgestellt haben, gibt es einen Browser, der ihn als VBScript interpretieren würde)? ?
Matthew Flaschen

1

Wenn Sie ein Skript-Tag in SVG einfügen, müssen Sie das Typattribut angeben. Und es sollte "text/ecmascript"eher sein als "text/javascript".

Wenn Ihr Skript inline (nicht verknüpft) ist, müssen Sie den Skriptkörper auch in eine CDATA-Deklaration einschließen. Das Inline-Skript-Boilerplate für SVG (und andere XML-Varianten) ist somit

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

Dies können Sonderfälle "in the wild" sein, aber sie sind real genug, und die Verwendung von SVG nimmt zu. Daher ist es für andere falsch zu behaupten, dass das Typattribut und CDATA in modernen Browsern völlig veraltet sind. Die Anwendungsfälle sind zwar eng, aber nicht ungewöhnlich.

"Ändern Sie die Umgebung in das Gegenteil und jede Weisheit wird zur schlimmsten Torheit." - Ashby


1
Guter Anruf. Ich habe gerade an einer komplexen SVG gearbeitet und das ist in der Tat der Fall!
Dave Everitt

1

👉🏻 Die HTML5-Spezifikation fordert die Autoren auf, das Attribut wegzulassen, anstatt einen redundanten MIME-Typ bereitzustellen. MDN

Mit dem MIME-Sniffing-Standard kann JavaScript mit einem beliebigen MIME-Typ ( Multipurpose Internet Mail Extensions ) bereitgestellt werden, der den folgenden Anforderungen entspricht :

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

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

0

Nun, ich sehe immer mehr Beispiele ohne Text / Javascript, aber aus irgendeinem Grund funktionieren meine Skripte in FF nicht, wenn ich das tue. Ich würde empfehlen, die Text- / Javascript-Erklärung beizubehalten. Das CDATA-Tag verhindert, dass Javascript auf Ihrer Website als einfacher Text angezeigt wird, wenn in Ihrem Browser Javascript deaktiviert ist. Persönlich benutze ich diese Tags nicht mehr. Ich glaube nicht, dass es viele Benutzer ohne gibt, und wenn sie da draußen sind, möchten sie vielleicht ein paar Köpfe wachsen lassen: P.


Weder das Typattribut noch das alte CDATA-Objekt sind erforderlich, es sei denn, Sie möchten wirklich auf wirklich antike Browser abzielen. Sie sollten jedoch nichts verletzen, solange Sie wirklich den richtigen Typ verwenden.
Pointy

Ich verwende die neueste stabile FF-Version und es scheint Probleme beim Parsen ohne die Deklaration von Text / Javascript zu geben. Ich verwende übrigens jQuery, aber das sollte keinen Unterschied machen.
Michael

Nun, ich führe meine gesamte Webanwendung mit Skript-Tags aus, die einfach sind <script>, keine "Sprache" und keinen "Typ", und sie funktionieren in allen Browsern einwandfrei. (Nun, alle vernünftigen: FF, Chrome, Safari, IE, Opera.)
Pointy

1
@pointy scheint, als hätte FatherStorm gerade eine Antwort darauf gepostet, warum dies geschieht. Ihre Kommentare scheinen also falsch zu sein.
Michael

@Michael Es kann sein, dass Sie ein Problem haben, wenn Sie den Fehler gemacht haben, mit XHTML / Strict zu arbeiten, aber selbst dann bezweifle ich es. Unter den Koryphäen der JavaScript-Welt herrscht allgemeine Übereinstimmung darüber, dass das Attribut "type" nicht erforderlich ist. Da ein schlechter "type" ein Skript beschädigt, ist es nur eine Quelle von Fehlern.
Pointy

0

type="text/javascript" : Erforderlich in HTML 4 und XHTML, aber optional in HTML5.

CDATA : Erforderlich in XHTML.

<!--: Wird verwendet, um das JavaScript vor sehr alten Browsern zu verbergen. Beispiel: Netscape 1 und Internet Explorer 2, von denen keiner mehr verwendet.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.