it-swarm.com.de

Chrome sagt "Ressource wurde als Skript interpretiert, aber mit MIME-Typ Text/Plain übertragen." Was gibt es?

In FF und allen funktioniert mein Javascript gut. In Chrome gibt es jedoch folgende Meldung: 

Ressource wird als Skript interpretiert, jedoch mit dem MIME-Typ "text/plain" übertragen.

Ich habe alle Skript-Tags überprüft und sie haben alle den MIME type="text/javascript". Es sagt sogar so mit jquery und jquery ui. Was ist los mit Chrome?

Was ist das Problem und der Fix dafür? Muss ich etwas in den "Optionen" des Browsers ändern, oder vom Server oder muss ich meinen Code anpassen?

312
Shaoz

Dies bedeutet, dass der Server eine Javascript-HTTP-Antwort mit sendet

Content-Type: text/plain

Sie müssen den Server so konfigurieren, dass er eine JavaScript-Antwort mit sendet

Content-Type: application/javascript
203
SLaks

Dies hat nothing mit jQuery oder irgendeiner Art von clientseitigem Skriptcode zu tun. Es handelt sich um ein Problem mit serverseitigem: Der Server (-side-Anwendung) sendet nicht das erwartete HTTP Content-Type-Headerfeld value für die clientseitige Skriptressource. Dies geschieht, wenn der Webserver unzureichend konfiguriert oder falsch konfiguriert ist oder eine serverseitige Anwendung (z. B. PHP) die clientseitige Skriptressource generiert.

Zu den richtigen MIME-Medientypen für ECMAScript-Implementierungen wie JavaScript gehören:

  • text/javascript (registriert als obsolete, nicht veraltet; aber trotzdem valid und best best unterstützt)
  • text/ecmascript (registriert als obsolete, nicht veraltet; aber immer noch valid)
  • application/javascript
  • application/ecmascript

Sie enthalten not include application/x-javascript, da die oben aufgelisteten MIME-Medientypen bereits im Standardbaum registriert sind (es besteht also keine Notwendigkeit, experimentelle Datenträger zu verwenden). Vgl. RFC 4329, "Scripting Media Types" (2005 CE) und mein Testfall: Unterstützung für Scripting Media Types .

Eine Lösung besteht darin, den Server nach Möglichkeit zu konfigurieren, wie bereits empfohlen. Für Apache kann dies so einfach sein wie das Hinzufügen der Direktive

AddType text/javascript .js

(Weitere Informationen finden Sie in der Apache HTTP Server-Dokumentation .).

Wenn die clientseitige Skriptressource jedoch von einer serverseitigen Anwendung wie PHP generiert wird, muss der Wert des Content-Type-Headerfelds explizit festgelegt werden, da der Standardwert text/html wahrscheinlich ist.

<?php
  header('Content-Type: text/javascript; charset=UTF-8');
  // ...
?>

(Diese und ähnliche Anweisungen müssen vor jeder anderen Ausgabe stehen - siehe Handbuch PHP -, andernfalls gilt der HTTP-Nachrichtentext als bereits begonnen und es ist zu spät, um weitere Header-Felder zu senden.)

Die serverseitige Generierung kann für eine clientseitige Skriptressource leicht vorkommen, selbst wenn Sie einfache .js-Dateien auf dem Server haben, wenn Kommentare aus ihnen entfernt werden, wenn sie geliefert werden, wenn sie alle in einer großen Antwort zusammengefasst sind (um die Anzahl der Server zu reduzieren) Anzahl der Anforderungen, die effizienter sein können) oder werden auf andere Weise von der serverseitigen Anwendung minimiert.

125
PointedEars

Für Java-Anwendungsserver wie Weblogic

1) Stellen Sie sicher, dass Ihre Datei weblogic.xml fehlerfrei ist

wie dieser:

    <?xml version = '1.0' encoding = 'windows-1252'?>
<weblogic-web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                  xsi:schemaLocation="http://www.bea.com/ns/weblogic/weblogic-web-app http://www.bea.com/ns/weblogic/weblogic-web-app/1.0/weblogic-web-app.xsd"
                  xmlns="http://www.bea.com/ns/weblogic/weblogic-web-app">
    <container-descriptor>
        <prefer-web-inf-classes>true</prefer-web-inf-classes>
    </container-descriptor>
    <context-root>MyWebApp</context-root>
</weblogic-web-app>

2) Fügen Sie Ihrer web.xml -Datei einen Mime-Typ für Javascript hinzu:

    ...
        </servlet-mapping>

        <mime-mapping>    
            <extension>js</extension>        
            <mime-type>application/javascript</mime-type>        
        </mime-mapping>

        <welcome-file-list>
    ...

Dies funktioniert auch für andere Java-Container - Tomcat usw. application/javascript ist derzeit der einzige gültige MIME-Typ. andere wie text/javascript wurden nicht mehr empfohlen.

3) Möglicherweise müssen Sie den Cache Ihres Browsers leeren oder die Tastenkombination STRG-F5 drücken

19
egallardo

Wenn Sie Ihr Javascript mit einer PHP-Datei generieren, fügen Sie dies als Anfang Ihrer Datei hinzu:

<?php Header("Content-Type: application/x-javascript; charset=UTF-8"); ?>
8
mopsyd

Ich hatte dieses Problem und habe herausgefunden, wie ich es beheben kann.

Dies geschieht, wenn die Style-Datei (CSS-Datei) eine andere Codierung aufweist als die Datei PHP, die auf die .css-Datei verweist 

Die Verwendung von jQuery.js in Unix-Codierung und die Verwendung von index.php in UTF-8 verursachen dieses Problem. Sie müssen also beide UTF-8-Codierungen oder andere Codierungen verwenden, sofern diese gleich sind. 

7
mak

Fügen Sie in der httpd.conf Ihres Apache einfach eine solche Zeile hinzu:

AddType application/x-javascript .js
3
Ruslan Abuzant

Ich habe diese Debug-Nachricht aus einem anderen Grund als den anderen Antworten erhalten: Dies ist die Fehlermeldung, die angezeigt wird, wenn Sie nicht genügend Schlaf erhalten und auf eine JS-Datei verweisen, indem Sie die Syntax für eine CSS-Datei verwenden. Wie in,

<link rel='stylesheet' type='text/css' href='clearly_javascript.js'/>

eher, als 

<script src='clearly_javascript.js'></script>

Ich dachte, ich würde das hier veröffentlichen, weil dies der erste Beitrag ist, der bei der Suche nach der Fehlermeldung erscheint. 

2
Robert Townley

Komisches Problem, aber das hat mir geholfen, mein Problem zu lösen. Manchmal sind selbst die einfachsten Dinge schwer zu verstehen ...

Anstelle von /js/main.css in meinem Skript-Tag habe ich js/main.css verwendet. 

JA, es hat tatsächlich einen Unterschied gemacht. Ich sitze auf WAMP/Windows und hatte keinen vhost, sondern nur localhost/<project>

Wenn ich auf /js/main.css verweise, verweise ich auf localhost/css/main.css und nicht auf localhost/<project>/css/main.css

Wenn man darüber nachdenkt, ist das offensichtlich, aber wenn jemand darüber stolpert, dachte ich, ich würde diese Antwort teilen.

Überprüfen Sie, ob Ihre JS-Dateien tatsächlich auf dem Server vorhanden sind. Ich hatte dieses Problem und entdeckte, dass die js-Dateien nicht auf den Server hochgeladen wurden. Stattdessen gab der Server tatsächlich die HTML-Seite zurück. Dies war das auf dem Server konfigurierte Standarddokument (z. B. default.html)

1
Steve Mc

Für mich ist das nur auf einigen Seiten passiert, weil ich window.location anstelle von $location.url(...); verwendet habe. Dauerte eine Weile, um herauszufinden, :)

1
tfa

Wenn Sie an Joomla arbeiten! Wenn Sie diese ärgerliche Fehlermeldung erhalten, wenn Sie versuchen, eine (.js) JavaScript-Datei einzuschließen, ist die folgende Lösung für Sie.

Das wahrscheinlichste Problem ist, dass Sie versuchen, eine .js-Datei einzuschließen, die nicht vorhanden ist, oder dass Sie einfach diese .js-Datei verlegt haben und wann Joomla! findet keine Ressource, und statt der generischen 404-Nachricht wird eine vollständige 404-Nachricht mit einer vollständigen Webseite und HTML usw. zurückgegeben.

Der Webbrowser interpretiert es als .js, während es lediglich eine Webseite ist, die besagt, dass die erforderliche Datei nicht gefunden wurde.

Dies kann für joomla2.5joomla3.0joomla3.1joomla3.2joomla3.3joomla funktionieren.

1

Wenn Sie beispielsweise AdonisJS (REST-API) verwenden, können Sie dies vermeiden, indem Sie den Antwortheader folgendermaßen definieren:

response.safeHeader('Content-type', 'application/json')
0

Ich hatte den gleichen Fehler und schließlich fand ich (in meinem speziellen Fall) ein Problem im Implementierungsdeskriptor (web.xml).

Das Problem:

<servlet-mapping>
    <servlet-name>SessionController</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>
...
<welcome-file-list>
    <welcome-file>/</welcome-file>
</welcome-file-list>

die Lösung:

<servlet-mapping>
    <servlet-name>SessionController</servlet-name>
    <url-pattern>/SessionController</url-pattern>
</servlet-mapping>
...
<welcome-file-list>
    <welcome-file>desktop.jsp</welcome-file>
</welcome-file-list>
0
Daniel Kennedy

Wenn es sich um IIS handelt, stellen Sie sicher, dass unter Ihrem common HTTP FeaturesStatic Content aktiviert ist

0
varun

In diesem Fall ist es üblich, wenn Sie einfach vergessen eingeben, um die type in Ihre Skriptaufrufe einzuschließen. Sie müssen es explizit setzen, wie es ist - gemäß W3 - erforderlich:

type (Inhaltstyp): Dieses Attribut gibt die Skriptsprache des Elementinhalts 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. Es gibt kein Standardwert für dieses Attribut.

Es scheint jedoch, dass browser einen Standardwert von plain/text hat.

Beispiel:

<script type="text/javascript" src="http://maps.googleapis.com/maps/api/js?sensor=false&language=en"></script>

Sie können auch einen Standard für diese Dateierweiterung in Ihrer Apache-Konfiguration festlegen:

<IfModule mod_mime.c>
    AddType text/javascript .js
</IfModule>
0
kaiser

Ich hatte dieses Problem während der Verwendung eines Web-Frameworks und es wurde behoben, indem die entsprechenden Javascript-Dateien in den (vom Framework) festgelegten Javascript-Ordner verschoben wurden.

0
JJ.

Wenn Sie Spring MVC verwenden, können Sie das folgende mvn-Tag hinzufügen, um die Ressourcendatei vom Spring Dispatch-Servlet auszuschließen

<mvc:resources mapping="/js/*.js" location="/js/"/>
<mvc:resources mapping="/css/*.css" location="/css/"/>
<mvc:resources mapping="/images/*.*" location="/images/"/>
0
sendon1982

In meinem Fall hat der Server den richtigen Content-Type gesendet, jedoch mit einem falschen Content-Encoding. Stellen Sie sicher, dass Sie nur Content-Encoding: gzip für gezippte Ressourcen festlegen. Nachdem ich die Header im Server (in meinem Fall Google Cloud Storage) behoben hatte, musste ich einige Minuten warten, um die Änderungen aufgrund des Zwischenspeichers korrekt wiederzugeben.

0
falsarella