In FF und allem funktioniert mein Javascript einwandfrei. Aber in Chrome gibt es diese Nachricht:
Ressource als Skript interpretiert, aber mit MIME-Typ text / plain übertragen.
Ich habe alle Skript-Tags überprüft und alle haben die MIME type="text/javascript"
. Das sagt es sogar mit jquery und jquery ui. Was ist los mit Chrome?
Was ist das Problem und die Lösung dafür? Muss ich die 'Optionen' des Browsers ändern oder ist es vom Server oder muss ich meinen Code optimieren?
google-chrome
mime-types
Shaoz
quelle
quelle
Antworten:
Dies bedeutet, dass der Server eine Javascript-HTTP-Antwort mit sendet
Sie müssen den Server so konfigurieren, dass eine JavaScript-Antwort mit gesendet wird
quelle
content-type:application/javascript
aberapplication/x-javascript
ist nicht ein RFC oder ECMAScript - Standard.Dies hat nichts mit jQuery oder einer Eigenart von clientseitigem Skriptcode zu tun. Es handelt sich um ein serverseitiges Problem: Der Server (-seitige Anwendung) sendet nicht den erwarteten Wert des HTTP-
Content-Type
Headerfelds für die clientseitige Skriptressource. Dies geschieht, wenn der Webserver nicht ausreichend 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
(als veraltet registriert , nicht veraltet, aber immer noch gültig und am besten unterstützt )text/ecmascript
(registriert als veraltet , nicht veraltet; aber immer noch gültig )application/javascript
application/ecmascript
Sie sind nicht enthalten
application/x-javascript
, da die oben aufgeführten MIME-Medientypen bereits im Standardbaum registriert sind (daher besteht keine Notwendigkeit mehr und es sollte auch kein Wunsch mehr bestehen, experimentelle 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
( 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
Content-Type
Headerfeldwert explizit festgelegt werden, da der Standard wahrscheinlich isttext/html
:(Diese und ähnliche Aussagen müssen vor jeder anderen Ausgabe stehen - siehe das PHP-Handbuch - sonst wird angenommen, dass der HTTP-Nachrichtentext bereits begonnen hat und es zu spät ist, weitere Headerfelder zu senden.)
Die serverseitige Generierung kann leicht zu einer clientseitigen Skriptressource führen, selbst wenn Sie einfache .js-Dateien auf dem Server haben, wenn Kommentare während der Zustellung von ihnen entfernt werden, wenn sie alle in einer großen Antwort zusammengefasst sind (um die Anzahl der Anforderungen, die effizienter sein können) oder die von der serverseitigen Anwendung auf andere Weise minimiert werden.
quelle
text/javascript
über empfehleapplication/javascript
. Wenn Sie Grund zu der Annahme haben, dass diesapplication/javascript
jetzt die bessere Antwort ist, sollten Sie sich zumindest in einem Kommentar erklären . Es ist unangemessen, dass der Benachrichtigungsmechanismus von Stack Overflow erforderlich ist, damit ich auf Ihre Änderungen aufmerksam werde. Ich habe Ihre Änderungen, die ich als Fudging bezeichne , auf die Antworten auf diese Frage zurückgesetzt, die ich für unangemessen halte.Für Java-Anwendungsserver wie Weblogic
1) Stellen Sie sicher, dass Ihre Datei weblogic.xml fehlerfrei ist
wie dieser:
2) Fügen Sie Ihrer web.xml- Datei einen MIME-Typ für Javascript hinzu :
Dies funktioniert auch für andere Java-Container - Tomcat usw.
application/javascript
ist derzeit der einzige gültige MIME-Typ. andere wietext/javascript
wurden veraltet.3) Möglicherweise müssen Sie Ihren Browser-Cache leeren oder STRG-F5 drücken
quelle
Ich hatte dieses Problem und fand heraus, wie ich es beheben kann.
Dies geschieht, wenn sich die CSS-Datei (Style) in einer anderen Codierung befindet als die PHP-Datei, die auf die CSS-Datei verweist
Wenn Sie beispielsweise jQuery.js in der Unix-Codierung und index.php in UTF-8 verwenden, tritt dieses Problem auf, sodass Sie beide UTF-8-Codierungen oder andere Codierungen festlegen müssen, solange sie identisch sind.
quelle
Wenn Sie Ihr Javascript mit einer PHP-Datei generieren, fügen Sie dies als Anfang Ihrer Datei hinzu:
quelle
Fügen Sie in der httpd.conf Ihres Apachen einfach eine solche Zeile hinzu:
quelle
Ich habe diese Debug-Nachricht aus einem dümmeren Grund erhalten als die anderen Antworten hier: Dies ist die Fehlermeldung, die erhalten wird, wenn Sie nicht genug Schlaf bekommen und auf eine JS-Datei verweisen, indem Sie die Syntax für eine CSS-Datei verwenden. Wie in,
eher, als
Ich dachte, ich würde dies hier veröffentlichen, da dies der erste Beitrag ist, der bei der Suche nach der Fehlermeldung angezeigt wird.
quelle
Seltsames Problem, aber das hat mir geholfen, mein Problem zu lösen. Manchmal sind selbst die einfachsten Dinge schwer herauszufinden ...
Anstatt
/js/main.css
in meinem Skript-Tag zu verwenden, habe ich verwendetjs/main.css
JA , es hat tatsächlich einen Unterschied gemacht. Ich sitze auf WAMP / Windows und hatte keinen vhost, sondern nur benutzt
localhost/<project>
Wenn ich mich beziehe,
/js/main.css
dann beziehe ich mich auflocalhost/css/main.css
und nicht auflocalhost/<project>/css/main.css
Wenn Sie daran denken, ist es ziemlich offensichtlich, aber wenn jemand darauf stößt, dachte ich, ich würde diese Antwort teilen.
quelle
Überprüfen Sie, ob Ihre JS-Dateien tatsächlich auf dem Server vorhanden sind. Ich hatte dieses Problem und stellte fest, dass die js-Dateien nicht auf den Server hochgeladen wurden und der Server stattdessen die HTML-Seite zurückgab - dies war das auf dem Server konfigurierte Standarddokument (z. B. default.html).
quelle
Wenn Sie an Joomla arbeiten! Wenn Sie diesen nervigen Fehler 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 diese einfach verlegt haben.js
Datei , und wenn Joomla! findet keine Ressource und gibt anstelle der generischen 404-Nachricht eine vollwertige 404-Nachricht mit einer vollständigen Webseite und HTML usw. zurück.Der Webbrowser interpretiert es so, als sei es
.js
nur eine Webseite, die besagt, dass die erforderliche Datei nicht gefunden wurde .Dies kann funktionieren für joomla2.5joomla3.0joomla3.1joomla3.2joomla3.3Joomla
quelle
Für mich ist es nur auf einigen Seiten passiert, weil ich
window.location
anstelle von$location.url(...);
Dies mein Problem behoben habe. Es hat eine Weile gedauert, um herauszufinden :)quelle
Ich hatte dieses Problem bei der Verwendung eines Webframeworks und habe es behoben, indem ich die relevanten Javascript-Dateien in den angegebenen (vom Framework) Javascript-Ordner verschoben habe.
quelle
In diesem Fall kommt es häufig vor, dass Sie einfach vergessen haben , die
type
Aufrufe in Ihr Skript aufzunehmen. Sie müssen es explizit setzen, wie es ist - nach W3 - erforderlich :Dennoch scheint es, dass Browser einen Standardwert von haben
plain/text
.Beispiel:
Sie können in Ihrer Apache-Konfiguration auch einen Standard für diese Dateierweiterung festlegen:
quelle
Wenn seine IIS sicherstellen, dass unter Ihrer
common HTTP Features
haben SieStatic Content
eingeschaltetquelle
Ich hatte den gleichen Fehler und schließlich (in meinem speziellen Fall) ein Problem im Bereitstellungsdeskriptor (web.xml) gefunden.
Das Problem:
die Lösung:
quelle
Wenn Sie Spring MVC verwenden, können Sie das folgende MVN-Tag hinzufügen, um die Ressourcendatei vom Spring Dispatch Servlet auszuschließen
quelle
In meinem Fall hat der Server das Richtige gesendet,
Content-Type
aber mit einem FalschenContent-Encoding
.Content-Encoding: gzip
Stellen Sie sicher, dass Sie nur komprimierte Ressourcen festlegen. Nachdem ich die Header auf dem Server (in meinem Fall Google Cloud Storage) repariert hatte, musste ich einige Minuten warten, um die Änderungen aufgrund des Cachings richtig wiederzugeben.quelle
Wenn Sie AdonisJS (z. B. REST-API) verwenden, können Sie dies vermeiden, indem Sie den Antwortheader folgendermaßen definieren:
quelle
Ich hatte das gleiche Problem beim Versuch, Hintergrundbilder in einem Array über Javascript (in diesem Fall jQuery) zu ändern.
Wie auch immer.
An Stelle von:
mach das:
Chrome Javascript wird beim Versuch, eine Variable in einem mit 'strukturierten Element zu analysieren, verschraubt. In meinem Fall wurde es kurz vor dem Einfügen des Bildarrays gestoppt. Anstatt die Bild-URL + den Bildnamen (innerhalb des Arrays) zu analysieren, wurde nur die Bild-URL analysiert.
Sie müssen wahrscheinlich im Code suchen und sehen, wo es passiert. FF, IE und alle anderen haben dieses Problem nicht.
quelle
eval
wenn Sie helfen können: javascripttoolbox.com/bestpractices/#evalDie Antwort gepostet hier von simon-sarris hat mir geholfen.
Vergessen Sie nicht, Ihr System nach den Änderungen neu zu starten.
quelle