Odmówiono wykonania skryptu, czy włączone jest ścisłe sprawdzanie typu MIME?

Odpowiedzi:

58

Masz <script>element, który próbuje załadować jakiś zewnętrzny JavaScript.

Podany adres URL wskazuje na plik JSON, a nie na program JavaScript.

Serwer poprawnie zgłasza, że ​​jest to format JSON, więc przeglądarka przerywa pracę z tym komunikatem o błędzie, zamiast próbować wykonać JSON jako JavaScript (co spowodowałoby błąd).


Szanse są takie, że przyczyną tego jest to, że próbujesz wykonać żądanie Ajax, napotkałeś błąd krzyżowego pochodzenia i próbowałeś go naprawić, informując jQuery, że używasz JSONP. Działa to tylko wtedy, gdy adres URL zapewnia JSONP (który jest innym podzbiorem JavaScript), czego ten nie zawiera.

Jednak ten sam adres URL z dodatkowym parametrem ciągu zapytania callback=the_name_of_your_callback_functionzwraca kod JavaScript.

Quentin
źródło
4
podałem to teraz i naprawia błąd <script id = "data" type = "application / json"
rob.m
2
type="application/json"- Teraz przeglądarka wie, że nie próbuje załadować JavaScript, więc całkowicie ignoruje element skryptu.
Quentin
58

W moim przypadku nie znaleziono pliku, błędnie wpisałem ścieżkę do pliku javascript.

mruanova
źródło
8
To samo. Nieprawidłowa ścieżka skutkuje błędną odpowiedzią strony html, co z kolei powoduje ten mylący komunikat o błędzie.
Gil Roitto,
2
Genialna odpowiedź. Dziękuję :)
Anjana Silva
21

Ten wynik jest pierwszym, który pojawia się w Google i jest szerszy niż to, co się tutaj dzieje. Poniższe zasady będą miały zastosowanie do serwera ekspresowego :

Próbowałem uzyskać dostęp do zasobów z zagnieżdżonego folderu.

Wewnątrz index.htmlmiałem

<script src="./script.js"></script>

Trasa statyczna została zamontowana w:

app.use(express.static(__dirname));

Ale script.jsznajduje się w zagnieżdżonym folderze, jak w: js/myStaticApp/script.js odmówił wykonania skryptu, sprawdzanie typu memów jest włączone. Właśnie zmieniłem trasę statyczną na:

app.use(express.static(path.join(__dirname, "js")));

Teraz działa :)

AIon
źródło
6

Spróbuj użyć express.static (), jeśli używasz Node.js.

Wystarczy przekazać nazwę katalogu, w którym przechowujesz zasoby statyczne, do oprogramowania pośredniego express.static, aby rozpocząć bezpośrednie udostępnianie plików. Na przykład, jeśli przechowujesz swoje obrazy, pliki CSS i JavaScript w katalogu o nazwie public, możesz wykonać poniższe czynności -

tj .: app.use (express.static ('public'));

To podejście rozwiązało mój problem.

Dzięki,

Nimesh
źródło
może nie jest poprawną odpowiedzią na to konkretne pytanie, ale było rozwiązaniem mojego problemu. Dzięki!
mcheah
2

Przypadkowo nazwałem plik js .minzamiast .min.js...

OZZIE
źródło
1

Kolba Pythona

W systemie Windows wykorzystuje dane z rejestru, więc jeśli wartość „Typ zawartości” w HKCR / .js nie jest ustawiona na właściwy typ MIME, może to spowodować problem.

Otwórz regedit i przejdź do HKEY_CLASSES_ROOT, upewnij się, że klucz .js / Content Type ma wartość text / javascript

C:\>reg query HKCR\.js /v "Content Type"

HKEY_CLASSES_ROOT\.js
    Content Type    REG_SZ    text/javascript
Devandran
źródło
1

Po chwili poszukiwań zdałem sobie sprawę, że ten błąd w moim Windows 10 64 bity był związany z JavaScriptem. Aby to zobaczyć, przejdź do DevTools swojej przeglądarki i najpierw potwierdź. W moim przypadku pokazuje błąd, taki jak „Typ MIME ('aplikacja / javascript') nie jest wykonywalny”.

Jeśli tak, to znalazłem rozwiązanie. Oto oferta:

  1. Pożyczający użytkownik „ilango100” na https://github.com/jupyterlab/jupyterlab/issues/6098 :

Niedawno miałem dokładnie ten sam problem. Myślę, że ten problem jest specyficzny dla systemu Windows. Jest to spowodowane ustawieniem nieprawidłowego typu MIME w rejestrze systemu Windows dla plików javascript. Rozwiązałem problem, edytując rejestr systemu Windows z poprawnym typem zawartości:

regedit -> HKEY_LOCAL_MACHINE \ Software \ Classes -> Zobaczysz wiele folderów dla każdego rozszerzenia pliku -> Po prostu przewiń w dół do rejestru „.js” i wybierz go -> Po prawej stronie, jeśli wartość „Typ treści” jest inna niż application / javascript, to jest przyczyną problemu. Kliknij prawym przyciskiem myszy typ zawartości i zmień wartość na application / javascript

wprowadź opis obrazu tutaj

Spróbuj ponownie w przeglądarce ”.

Potem zdałem sobie sprawę, że błąd się zmienia. Nie otwiera się już nawet automatycznie w przeglądarce. PGAdmin będzie jednak otwarty na pasku bocznym (blisko kalendarza / zegara). Próba bezpośredniego otwarcia w przeglądarce („Nowe okno PGAdmin 4 ...”) również nie działa.

KOŃCOWE ROZWIĄZANIE: kliknij „Kopiuj adres URL serwera” i wklej go w przeglądarce. U mnie zadziałało!

araujo.jpc
źródło
0

Dodaj fragment kodu, jak pokazano poniżej, do wpisu html. tj. „index.html” w respondjs

<div id="wrapper"></div>
<base href="/" />

Oseni Adefemi
źródło
1
Byłbym wdzięczny za wyjaśnienie, dlaczego jest to przydatne.
Juan Lanus
-1

Jeśli masz trasę ekspresową taką jak:

app.get("*", (req, res) => {
  ...
});

Spróbuj zmienić to na coś bardziej konkretnego:

app.get("/", (req, res) => {
  ...
});

Na przykład.

Albo po prostu możesz znaleźć się rekurencyjnie obsługując ten sam szablon HTML w kółko ...

Ariel
źródło
-1

Miałem ten sam problem, a potem naprawiłem w ten sposób

change "text/javascript"

do

type="application/json"
MH Fuad
źródło
2
To powstrzymuje przeglądarkę przed wysyłaniem żądania adresu URL w pierwszej kolejności i sprawia, że scriptobecność elementu w dokumencie jest całkowicie bezcelowa.
Quentin
-1

W moim przypadku miałem dowiązanie symboliczne do pliku 404'd, a mój Tomcat nie był skonfigurowany do zezwalania na dowiązania symboliczne.

Wiem, że prawdopodobnie nie będzie to przyczyną większości ludzi, ale jeśli jesteś zdesperowany, sprawdź tę możliwość na wszelki wypadek.

s1m3n
źródło
-2

miałem ten sam problem, a problem polegał na tym, że przegapiłem cięcie na mojej drodze.

miałem

i aby to naprawić, musiałem tylko dodać ukośnik między jquery-ui i jquery-ui.min:

  <script type="text/javascript" src="js/jquery-ui/jquery-ui.min.js"></script>

mam nadzieję, że to pomoże: D

Tom Hoffmann V.
źródło
-12

Rozwiązałem swój problem, dodając tylko $ {pageContext.request.contextPath} do mojej ścieżki jsp. zamiast :

 <script    src="static/js/jquery-3.2.1.min.js"></script>

Ustawiłem :

 <script    src="${pageContext.request.contextPath}/static/js/jquery-3.2.1.min.js"></script>
Yassine Bsf
źródło