W FF i całym moim javascript działa dobrze. Ale w Chrome wyświetla ten komunikat:
Zasób interpretowany jako skrypt, ale przesyłany za pomocą tekstu / zwykłego typu MIME.
Sprawdziłem wszystkie tagi skryptu i wszystkie mają MIME type="text/javascript"
. Mówi to nawet z jquery i jquery ui. Co jest nie tak z Chrome?
Na czym polega problem i naprawa? Czy to jest coś, co muszę zmienić w „opcjach” przeglądarki, czy to jest z serwera, czy też muszę poprawić mój kod?
google-chrome
mime-types
Shaoz
źródło
źródło
Odpowiedzi:
Oznacza to, że serwer wysyła odpowiedź HTTP JavaScript
Musisz skonfigurować serwer, aby wysyłał odpowiedź JavaScript
źródło
content-type:application/javascript
jednakapplication/x-javascript
to nie RFC standardowy lub ECMAScript.Nie ma to nic wspólnego z jQuery ani jakimkolwiek dziwactwem kodu skryptu po stronie klienta. Jest to problem po stronie serwera : serwer (aplikacja po stronie) nie wysyła oczekiwanej wartości
Content-Type
pola nagłówka HTTP dla zasobu skryptu po stronie klienta. Dzieje się tak, jeśli serwer WWW jest niedostatecznie skonfigurowany, źle skonfigurowany lub aplikacja po stronie serwera (np. PHP) generuje zasób skryptu po stronie klienta.Odpowiednie typy mediów MIME dla implementacji ECMAScript, takich jak JavaScript, obejmują:
text/javascript
(zarejestrowany jako przestarzały , nieaktualny; ale nadal ważny i najlepiej obsługiwany )text/ecmascript
(zarejestrowany jako przestarzały , nieaktualny; ale nadal ważny )application/javascript
application/ecmascript
Oni nie należą
application/x-javascript
, jak MIME typy mediów wymienione powyżej są te zarejestrowane w standardach drzewa już (więc nie ma potrzeby, i nie powinno być żadnych Kupię, aby korzystać z nich już eksperymentalne). Por. RFC 4329, „Scripting Media Types” (2005 CE) i mój przypadek testowy: obsługa typów skryptów .Jednym z rozwiązań jest skonfigurowanie serwera, jeśli to możliwe, jak już zalecono. W przypadku Apache może to być tak proste, jak dodanie dyrektywy
(szczegóły w dokumentacji serwera HTTP Apache ).
Ale jeśli zasób skryptu po stronie klienta jest generowany przez aplikację po stronie serwera, taką jak PHP, konieczne jest
Content-Type
jawne ustawienie wartości pola nagłówka, ponieważ prawdopodobne jest ustawienie domyślnetext/html
:(Te i podobne instrukcje muszą pojawić się przed jakimkolwiek innym wyjściem - patrz instrukcja PHP - w przeciwnym razie treść wiadomości HTTP uważa się za już rozpoczętą i jest za późno, aby wysłać więcej pól nagłówka).
Generowanie po stronie serwera może łatwo przydarzyć się zasobowi skryptu po stronie klienta, nawet jeśli na serwerze znajdują się zwykłe pliki .js, jeśli komentarze zostaną z nich usunięte podczas ich dostarczania, jeśli wszystkie zostaną spakowane w jedną dużą odpowiedź (aby zmniejszyć liczba żądań, które mogą być bardziej wydajne) lub są one minimalizowane przez aplikację po stronie serwera w jakikolwiek inny sposób.
źródło
text/javascript
ponadapplication/javascript
. Jeśli masz powody, by sądzić, żeapplication/javascript
jest to lepsza odpowiedź, to przynajmniej powinieneś zrobić to wyjaśnić się w komentarzu. To niewłaściwe, że wymaga mechanizmu powiadamiania o przepełnieniu stosu, aby uzyskać informację o twoich zmianach. Cofnęłam twoje zmiany, które nazywam kręceniem , do odpowiedzi na to pytanie, w których uważam je za niewłaściwe.Dla serwerów aplikacji Java, takich jak Weblogic
1) Upewnij się, że plik weblogic.xml jest wolny od błędów
jak ten:
2) Dodaj typ MIME dla javascript do pliku web.xml :
Będzie to działać również w przypadku innych kontenerów Java - Tomcat itp.
application/javascript
Jest obecnie jedynym prawidłowym typem MIME; inni jaktext/javascript
byli przestarzali.3) Może być konieczne wyczyszczenie pamięci podręcznej przeglądarki lub naciśnięcie CTRL-F5
źródło
Miałem ten problem i wymyśliłem, jak go naprawić.
Dzieje się tak, gdy plik stylu (CSS) ma inne kodowanie niż plik PHP, który odwołuje się do pliku .css
Na przykład użycie pliku jQuery.js w kodowaniu uniksowym i użycie pliku index.php w UTF-8 spowoduje ten problem, więc musisz ustawić je zarówno UTF-8, jak i dowolne inne kodowanie, o ile jest takie samo.
źródło
Jeśli generujesz skrypt javascript z plikiem php, dodaj go jako początek pliku:
źródło
W httpd.conf twojego apache, po prostu dodaj taką linię:
źródło
Otrzymałem ten komunikat debugowania z głupszego powodu niż inne odpowiedzi tutaj: Jest to komunikat o błędzie otrzymany, gdy nie masz wystarczającej ilości snu i odwołujesz się do pliku js przy użyciu składni pliku css. Jak w,
zamiast
Pomyślałem, że umieszczę to tutaj, ponieważ jest to pierwszy post, który pojawia się podczas wyszukiwania komunikatu o błędzie.
źródło
Dziwny problem, ale pomogło mi to rozwiązać problem. Czasami nawet najłatwiejsze rzeczy trudno wymyślić ...
Zamiast używać
/js/main.css
w skrypcie tagu, którego użyłemjs/main.css
TAK , to naprawdę miało znaczenie. Siedzę na WAMP / Windows i nie miałem vhosta, tylko go użyłem
localhost/<project>
Jeśli odnoszę się do,
/js/main.css
to odnoszę się do,localhost/css/main.css
a nie dolocalhost/<project>/css/main.css
Kiedy myślisz o tym, jest to dość oczywiste, ale jeśli ktoś się na to natknie, pomyślałem, że podzielę się tą odpowiedzią.
źródło
Sprawdź, czy pliki js faktycznie istnieją na serwerze. Miałem ten problem i odkryłem, że pliki js nie zostały przesłane na serwer, a serwer faktycznie zwracał stronę HTML - który był domyślnym dokumentem skonfigurowanym na serwerze (np. Default.html)
źródło
Jeśli pracujesz nad Joomla! i otrzymanie tego irytującego błędu przy próbie dołączenia (
.js
) pliku JavaScript, poniższe rozwiązanie jest dla Ciebie.Najbardziej prawdopodobnym problemem jest to, że próbujesz dołączyć
.js
plik, którego nie ma , lub po prostu zgubiłeś ten.js
plik i kiedy Joomla! nie znajduje zasobu, a następnie zamiast ogólnego komunikatu 404, zwraca pełnowartościowy komunikat 404 z pełną stroną internetową i HTML itp.Przeglądarka internetowa interpretuje to jako
.js
zwykłą stronę internetową informującą, że nie znaleziono wymaganego pliku .To może zadziałać joomla2.5joomla3.0joomla3.1joomla3.2joomla3.3joomla
źródło
Dla mnie stało się to tylko na niektórych stronach, ponieważ użyłem
window.location
zamiast$location.url(...);
tego Naprawiłem mój problem. Długo to wymyśliłem :)źródło
Miałem ten problem podczas korzystania z frameworka i naprawiłem go, przenosząc odpowiednie pliki javascript do wyznaczonego (przez framework) folderu javascript.
źródło
Częstą rzeczą jest, gdy tak się dzieje, jeśli po prostu zapomniałeś uwzględnić
type
w swoich wywołaniach skryptu. Musisz to ustawić jawnie, ponieważ jest to - zgodnie z W3 - wymagane :Nadal wydaje się, że przeglądarki mają domyślną wartość
plain/text
.Przykład:
Równie dobrze możesz ustawić domyślne dla tego rozszerzenia pliku w konfiguracji Apache:
źródło
Jeśli jest to IIS, upewnij się,
common HTTP Features
że zostałStatic Content
włączonyźródło
Miałem ten sam błąd i wreszcie (w moim konkretnym przypadku) znalazłem problem w deskryptorze wdrażania (web.xml)
Problem:
rozwiązanie:
źródło
Jeśli używasz Spring MVC, możesz dodać następujący znacznik mvn, aby wykluczyć plik zasobów z serwletu Spring Dispatch
źródło
W moim przypadku serwer wysyłał poprawne,
Content-Type
ale niepoprawneContent-Encoding
. Upewnij się, że ustawiłeś tylkoContent-Encoding: gzip
dla spakowanych zasobów. Ponadto po naprawieniu nagłówków na serwerze (w moim przypadku Google Cloud Storage) musiałem poczekać kilka minut, aby odpowiednio odzwierciedlić zmiany wynikające z buforowania.źródło
Jeśli używasz AdonisJS (na przykład REST API), jednym ze sposobów uniknięcia tego jest zdefiniowanie nagłówka odpowiedzi w ten sposób:
źródło
Miałem ten sam problem przy próbie zmiany obrazów tła w tablicy za pomocą javascript (w tym przypadku jQuery).
Tak czy siak.
Zamiast tego:
Zrób to:
Chrome javascript zostaje wkręcony podczas próby analizy zmiennej wewnątrz elementu o strukturze „. W moim przypadku zatrzymał się tuż przed wstawieniem tablicy obrazów. Zamiast analizować adres URL obrazu + nazwę obrazu (wewnątrz tablicy), analizował tylko adres URL obrazu.
Prawdopodobnie będziesz musiał przeszukać kod i zobaczyć, gdzie to się dzieje. FF, IE i wszystkie inne nie mają tego problemu.
źródło
eval
jeśli możesz pomóc: javascripttoolbox.com/bestpractices/#evalOdpowiedź zamieszczona tutaj przez simon-sarris pomogła mi.
Nie zapomnij zrestartować systemu po zmianach.
źródło