Отказано в выполнении скрипта, включена строгая проверка типа MIME?

Ответы:

58

У вас есть <script>элемент, который пытается загрузить некоторый внешний JavaScript.

Указанный вами URL указывает на файл JSON, а не на программу JavaScript.

Сервер правильно сообщает, что это JSON, поэтому браузер прерывает работу с этим сообщением об ошибке вместо попытки выполнить JSON как JavaScript (что приведет к ошибке).


Скорее всего, основная причина этого заключается в том, что вы пытаетесь сделать запрос Ajax, столкнулись с ошибкой перекрестного происхождения и попытались исправить ее, сообщив jQuery, что вы используете JSONP. Это работает, только если URL-адрес предоставляет JSONP (который является другим подмножеством JavaScript), чего нет в этом.

Однако тот же URL-адрес с дополнительным параметром строки запроса callback=the_name_of_your_callback_functionвозвращает JavaScript.

Квентин
источник
4
Я дал это, и он исправляет ошибку <script id = "data" type = "application / json"
rob.m
2
type="application/json"- Теперь браузер знает, что он не пытается загрузить JavaScript, поэтому он полностью игнорирует элемент скрипта.
Quentin
58

В моем случае это был файл, который не был найден, я неправильно ввел путь к файлу javascript.

Мруанова
источник
8
Такой же. Неправильный путь приводит к некоторой ошибке ответа html-страницы, что, в свою очередь, вызывает это сбивающее с толку сообщение об ошибке.
Gil Roitto
2
Гениальный ответ. Спасибо :)
Анджана Сильва
21

Этот результат - первое, что появляется в Google, и он шире, чем здесь. Следующее будет применяться к экспресс-серверу :

Я пытался получить доступ к ресурсам из вложенной папки.

Внутри у index.htmlменя было

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

Статический маршрут был смонтирован по адресу:

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

Но script.jsон находится во вложенной папке, как в: js/myStaticApp/script.js отказано в выполнении скрипта, включена проверка типа мемов. Я просто изменил статический маршрут на:

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

Теперь работает :)

AIon
источник
6

Попробуйте использовать express.static (), если вы используете Node.js.

Вам просто нужно передать имя каталога, в котором вы храните свои статические ресурсы, промежуточному программному обеспечению express.static, чтобы начать обслуживание файлов напрямую. Например, если вы храните свои изображения, файлы CSS и JavaScript в каталоге с именем public, вы можете сделать следующее:

например: app.use (express.static ('public'));

Этот подход решил мою проблему.

Благодарность,

Нимеш
источник
Возможно, это неправильный ответ на этот конкретный вопрос, но это было решение моей проблемы. Благодарность!
mcheah
2

Я случайно назвал файл js .minвместо .min.js...

Оззи
источник
2

После некоторого поиска я понял, что эта ошибка в моей 64-разрядной версии Windows 10 была связана с JavaScript. Чтобы увидеть это, зайдите в DevTools вашего браузера и сначала подтвердите это. В моем случае это показывает ошибку типа «MIME-тип ('application / javascript') не является исполняемым».

В таком случае я нашел решение. Вот сделка:

  1. Заимствование пользователя ilango100 на https://github.com/jupyterlab/jupyterlab/issues/6098 :

Некоторое время назад у меня была точно такая же проблема. Я думаю, что эта проблема специфична для Windows. Это связано с тем, что в реестре Windows для файлов javascript установлен неправильный тип MIME. Я решил проблему, отредактировав реестр Windows с правильным типом содержимого:

regedit -> HKEY_LOCAL_MACHINE \ Software \ Classes -> Вы увидите множество папок для каждого расширения файла -> Просто прокрутите вниз до реестра «.js» и выберите его -> Справа, если значение «Content Type» отличается от application / javascript, то это вызывает проблему. Щелкните правой кнопкой мыши Content Type и измените значение на application / javascript.

введите описание изображения здесь

Повторите попытку в браузере. "

После этого я понял, что ошибка меняется. Он даже больше не открывается автоматически в браузере. Однако PGAdmin будет открыт на боковой панели (рядом с календарем / часами). При попытке открыть в браузере напрямую («Новое окно PGAdmin 4 ...») он тоже не работает.

ОКОНЧАТЕЛЬНОЕ РЕШЕНИЕ: нажмите «Копировать URL-адрес сервера» и вставьте его в свой браузер. У меня это сработало!

araujo.jpc
источник
+1 это сработало для меня. Я сделал изменения в реестре использовать application/javascriptдля .jsрасширения. Затем я закрыл и снова открыл pgAdmin, и он загрузился нормально (без копирования URL-адреса сервера). Я использую Windows 8.1 и PostgresSQL 13.
Эрик Мутта
1

Колба Python

В Windows он использует данные из реестра, поэтому, если значение «Content Type» в HKCR / .js не установлено на правильный тип MIME, это может вызвать вашу проблему.

Откройте regedit и перейдите в HKEY_CLASSES_ROOT, убедитесь, что ключ .js / Content Type имеет значение text / javascript

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

HKEY_CLASSES_ROOT\.js
    Content Type    REG_SZ    text/javascript
Девандран
источник
0

Добавьте фрагмент кода, как показано ниже, в запись html. т.е. index.html в reactjs

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

Осени Адефеми
источник
1
Я был бы очень признателен за объяснение, почему это полезно.
Хуан Ланус
-1

Если у вас есть маршрут экспресса, например:

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

Попробуйте поменять его на что-то более конкретное:

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

Например.

Или вы просто можете обнаружить, что рекурсивно обслуживаете один и тот же HTML-шаблон снова и снова ...

Ариэль
источник
-1

У меня была такая же проблема, и я исправил это

change "text/javascript"

к

type="application/json"
MH Fuad
источник
2
Это в первую очередь останавливает браузер, выполняющий запрос URL-адреса, и делает присутствие scriptэлемента в документе совершенно бессмысленным.
Квентин
-1

В моем случае у меня была символическая ссылка для файла 404'd, и мой Tomcat не был настроен для разрешения символических ссылок.

Я знаю, что для большинства людей это вряд ли будет причиной, но если вы в отчаянии, проверьте эту возможность на всякий случай.

s1m3n
источник
-2

У меня была такая же проблема, и проблема заключалась в том, что на моем пути отсутствовала косая черта.

я имел

и чтобы исправить это, мне нужно было только добавить косую черту между jquery-ui и jquery-ui.min:

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

надеюсь, это поможет: D

Том Хоффманн В.
источник
-12

Я решил свою проблему, добавив всего лишь $ {pageContext.request.contextPath} к моему пути jsp. вместо того :

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

Я установил:

 <script    src="${pageContext.request.contextPath}/static/js/jquery-3.2.1.min.js"></script>
Ясин Бсф
источник