Wenn Sie JavaScript-Dateien bereitstellen, ist es besser, die Anwendung / Javascript oder die Anwendung / X-Javascript zu verwenden

95

Die ganze Frage passt in den Titel. Und um einen Kontext hinzuzufügen: Ich frage nicht, was nach den Angaben der Spezifikationen am besten ist, sondern was angesichts der Mischung der heutzutage eingesetzten Browser am besten funktioniert.

Einige Datenpunkte:

  • Google verwendet text/javascriptfür die JS auf ihrer Homepage.
  • Google verwendet text/javascriptin Google Text & Tabellen.
  • Google verwendet application/x-javascriptJavaScript-Dateien mit seinem Ajax-Bibliotheksdienst .
  • Yahoo verwendet application/x-javascript, um ihre JS zu dienen.
  • Yahoo verwendet application/x-javascriptfür das JavaScript, das auf seiner Homepage bereitgestellt wird.
Avernet
quelle
4
Komisch. Sie geben in Ihren Beispielen eine dritte Alternative an ... Und laut Tim liegen beide Big Player falsch (in Bezug auf Standards), was wahrscheinlich nur bedeutet, dass Browser tolerant sind (keine großen Neuigkeiten hier) und es könnte keine Rolle spielen.
PhiLho
1
möglicher Betrüger: Javascript MIME Type
Bergi

Antworten:

115
  • text/javascript ist obsolet
  • application/x-javascript war experimentell, als ich mich entschied, nach…
  • application/javascript ist der aktuelle offizielle MIME-Typ für JS

Trotzdem ignorieren Browser häufig die content-typevom Server gesendeten und achten sehr auf das typeAttribut (und einige erkennen es möglicherweise noch nicht application/javascript).

Meine Empfehlung:

  • Verwenden Sie application / javascript auf dem Server
  • Verwenden Sie HTML 5 und lassen Sie das typeAttribut in den Skriptelementen weg

NB: Die HTML-Spezifikation widerspricht dem MIME-Standard, und es wird versucht , ihn wieder zu ändern , text/javascriptdamit sich dies in Zukunft ändern kann.

Quentin
quelle
3
Diese Frage von vor einigen Monaten sagt genau das Gegenteil. Jemand irrt sich :) "Kelly hat recht, Browser neigen dazu, dem MIME-Typ zu vertrauen, der mit den Antwortheadern
Marco
6
Ach nein! Große, monolithische, langsame Organisationen müssen Recht haben! Die Spezifikation muss falsch sein! Narghh. Ich werde weiterhin der Spezifikation und meiner eigenen Erfahrung bei großen (langsamen) Unternehmen vertrauen, auch wenn einer von ihnen mich früher angestellt hat.
Quentin
1
Hmm, jemand hat vergessen, W3C mitzuteilen, dass Text / Javascript veraltet ist. Dies scheint die Standardeinstellung in HTML 5 zu sein . :: Kratzer Kopf :: Es scheint auch (wenn meine oberflächliche Lektüre dieses Abschnitts korrekt ist) , dass User Agents sind angeblich nur auf dem gehen typeAttribut, so ignoriert das Content-typerichtige Verhalten wäre.
big_m
1
@big_m - Das liegt daran, dass viele Browser dies nicht erkennen. Wenn Sie dies angeben application/javascript, ignorieren sie das Skript. Benutzeragenten sollten den Inhaltstyp nicht ignorieren. Das type-Attribut sagt ihnen, was sie zu erwarten haben. Wenn sie es nicht unterstützen, sollten sie sich nicht die Mühe machen, es anzufordern. Wenn der Server dann sagt, dass es etwas anderes ist, sollten sie eher so weitermachen als das, was der HTML-Code sagt (zumindest laut HTTP sehen Sie sich möglicherweise eine andere Spezifikation an, Sie haben keine Links angegeben).
Quentin
1
@ Quentin, ich habe auf den HTML 5-Abschnitt des scriptElements verwiesen, mit dem ich verlinkt habe. Meine Lektüre dieses Abschnitts unterscheidet sich von dem, was Sie beschreiben. Es scheint dem typeAttribut eine große Bedeutung beizumessen und erwähnt die Überprüfung nicht Content-Type, außer zur Bestimmung der Zeichenkodierung. Ich bin damit einverstanden, dass es für den Benutzeragenten sinnvoll erscheint, zu überprüfen, ob der Inhaltstyp den Erwartungen entspricht, aber ich habe in der HTML-Spezifikation nichts gefunden, was dies erfordert oder sogar empfiehlt.
big_m
12

In den meisten Situationen macht der vom Server gesendete MIME-Typ keinen praktischen Unterschied. Ich würde mit Anwendung / Javascript gehen , was auch von einem RFC empfohlen wird.

Matthew Flaschen
quelle
7

Wenn Sie auf Ihren Seiten application / javascript für js verwenden, führen IE7 und IE8 Ihr Skript nicht aus! Beschuldigen Sie Microsoft, was Sie wollen, aber wenn Sie möchten, dass die meisten Leute Ihre Seiten ausführen, verwenden Sie Text / Javascript.

Drew B.
quelle
3
Wenn Sie sagen, dass "Anwendung / Javascript" nicht funktioniert, meinen Sie damit, ob dies als Inhaltstyp in der HTTP-Antwort oder als "Typ" -Attribut eines Skript-Tags festgelegt ist? Die ursprüngliche Frage betraf den Inhaltstyp für HTTP-Antworten. Basierend auf anderen Antworten sieht es so aus, als würde nur der Wert des Attributs "type" in Skript-Tags in beiden Fällen einen Unterschied im IE bewirken.
Jesse Hallett
7

Früher war es so language="javacript". Dann änderte es sich zu type="text/javascript". Jetzt ist es so type="application/javacript". Ok, das wird dumm. Einige der älteren Browser erkennen das Neue nicht application/javascript, aber das Ältere text/javascript. Ich habe vor, dies weiterhin zu verwenden, oder ich werde Stunden meiner Zeit damit verschwenden, JEDE Instanz von text/javascriptin zu ändern application/javascript.
Eines Tages könnte das Gegenteil der Fall sein. Eines Tages könnten die neuesten Browser die alte Technik ablehnen, um streng standardkonform zu sein.
Aber bis Leute, die meine Website besuchen, sich darüber beschweren, dass "seit dem Upgrade meines Browsers etwa 50% Ihrer Website verschwunden sind", habe ich kein Motiv, den Code auf meiner Website zu ändern.

Sandip Armal Patil
quelle
7

Hier ist die Antwort 2020 auf diese Frage.

text/javascriptist der richtige JavaScript-MIME-Typ gemäß dem HTML-Standard , der Folgendes angibt:

Server sollten text/javascriptfür JavaScript-Ressourcen verwendet werden. Server sollten keine anderen JavaScript-MIME-Typen für JavaScript-Ressourcen verwenden und dürfen keine Nicht-JavaScript-MIME-Typen verwenden.

Und auch :

[…] Der MIME-Typ, der in dieser Spezifikation verwendet wird text/javascript, um auf JavaScript zu verweisen, ist , da dies der am häufigsten verwendete Typ ist, obwohl es sich um einen offiziell veralteten Typ gemäß RFC 4329 handelt.

Es wird daran gearbeitet, diese Realität in einem RFC auf IETF-Ebene widerzuspiegeln: https://datatracker.ietf.org/doc/draft-ietf-dispatch-javascript-mjs/

Jede Behauptung, dass " text/javascriptveraltet ist", basiert auf RFC 4329, den sowohl der HTML-Standard als auch der oben genannte IETF-Entwurf (dh ein bevorstehender RFC) explizit korrigieren.

Mathias Bynens
quelle
4

Es war "Text / Javascript", aber dies ist veraltet (siehe IANA-Liste ) und jetzt sollte es "Anwendung / Javascript" sein (siehe eine andere IANA-Liste ).

Tim Büthe
quelle