Chrome говорит: "Ресурс интерпретируется как script, но передается с типом текста MIME/plain.", Что дает?

В FF и во всех моих javascript отлично работает. Но в Chrome он дает следующее сообщение:

Ресурс интерпретируется как script, но передается с текстом MIME/plain.

Я проверил все теги script, и все они имеют MIME type="text/javascript". Он даже говорит об этом с jquery и jquery ui. Что не так с Chrome?

Какая проблема и исправление для этого? Это что-то, что мне нужно изменить в "параметрах" браузера или с сервера, или мне нужно настроить мой код?

Ответ 1

Это означает, что сервер отправляет HTTP-ответ Javascript с помощью

Content-Type: text/plain

Вам нужно настроить сервер для отправки ответа JavaScript с помощью

Content-Type: application/javascript

Ответ 2

Это имеет ничего для работы с jQuery или любой причудой клиентского кода script. Это проблема на стороне сервера: сервер (приложение-приложение) не отправляет ожидаемое HTTP Content-Type поле заголовка для клиентского ресурса script. Это происходит, если веб-сервер недостаточно настроен, неправильно сконфигурирован или серверное приложение (например, PHP) генерирует ресурс script на стороне клиента.

Соответствующие типы MIME-носителей для реализации ECMAScript, таких как JavaScript, включают:

  • text/javascript (зарегистрировано как устаревшее, но не устарело, но все еще допустимо и поддерживается лучше)
  • text/ecmascript (зарегистрировано как устаревшее, не устарело, но все еще допустимо)
  • application/javascript
  • application/ecmascript

Они не включают application/x-javascript, так как перечисленные выше типы мультимедиа MIME - это те, которые уже зарегистрированы в дереве стандартов (поэтому нет необходимости, и не должно быть необходимости, чтобы использовать экспериментальные больше). Ср RFC 4329, "Типы медиа-сценариев" (2005 г.) и мой Тест-сценарий: поддержка типов сценариев для создания сценариев.

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

AddType text/javascript .js

(подробнее см. Документацию HTTP-сервера Apache).

Но если клиентский ресурс script генерируется серверным приложением, таким как PHP, тогда необходимо явно указать значение поля заголовка Content-Type, поскольку по умолчанию, вероятно, text/html:

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

(Это и подобные утверждения должны появиться перед любым другим выходом - см. руководство по PHP - иначе считается, что тело сообщения HTTP уже, и слишком поздно отправлять больше полей заголовка.)

Генерация на стороне сервера может быть легко реализована на клиентском ресурсе script, даже если на сервере есть простые .js файлы, если комментарии удалены из них при их обслуживании, если все они упакованы в один большой ответ (чтобы уменьшить количество запросов, которые могут быть более эффективными), или они сведены к минимуму приложением на стороне сервера любым другим способом.

Ответ 3

Для серверов приложений Java, таких как Weblogic

1) Убедитесь, что ваш файл weblogic.xml свободен от ошибок.

как этот:

    <?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) Добавьте тип mime для javascript в файл web.xml:

    ...
        </servlet-mapping>

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

        <welcome-file-list>
    ...

Это будет работать и для других контейнеров Java - Tomcat и т.д. application/javascript в настоящее время является единственным допустимым типом mime; другие, такие как text/javascript, устарели.

3) Возможно, вам придется очистить кеш браузера или нажать CTRL-F5

Ответ 4

Если вы создаете свой javascript с помощью php файла, добавьте это как начало своего файла:

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

Ответ 5

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

Это происходит, когда файл стиля (CSS) находится в другой кодировке из файла PHP, который ссылается на файл .css

Например, использование jQuery.js в кодировке Unix и использование index.php в UTF-8 вызовет эту проблему, поэтому вы должны сделать их как UTF-8, так и любую другую кодировку, если она будет такой же.

Ответ 6

В apache httpd.conf просто добавьте такую ​​строку:

AddType application/x-javascript .js

Ответ 7

Проблема Werid.., но это помогло мне решить мою проблему. Иногда даже самые простые вещи трудно понять...

Вместо использования

/js/main.css в моем script -tag

Я использовал js/main.css

ДА, это действительно имело значение. Я сижу на WAMP/Windows, и у меня не было vhost, но просто использовал localhost/<project>

Если я ссылаюсь на /js/main.css, то ссылаюсь на localhost/css/main.css, а не на localhost/<project>/css/main.css

Когда вы думаете об этом, это совершенно очевидно, но если кто-то наткнулся на это, я решил поделиться этим ответом.

Ответ 8

Я получил это отладочное сообщение по более глупой причине, чем другие ответы здесь: Это сообщение об ошибке, полученное, когда вы не получаете достаточного количества сна и ссылаетесь на файл js, используя синтаксис для файла css. Как и в,

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

а не

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

Думаю, что я бы сказал, что это первое сообщение, которое появляется при поиске сообщения об ошибке.

Ответ 9

Проверьте, действительно ли ваши файлы js существуют на сервере. У меня была эта проблема, и я обнаружил, что файлы js не были загружены на сервер, а сервер фактически возвращал html-страницу - это был документ по умолчанию, настроенный на сервере (например, default.html)

Ответ 10

Если вы работаете над Joomla! и получить эту неприятную ошибку при попытке включить файл JavaScript (.js), то для вас будет следующее решение.

Наиболее вероятная проблема заключается в том, что вы пытаетесь включить .js файл, который не существует, или вы просто потеряли этот файл .js, и когда Joomla! не находит ресурс, то вместо общего сообщения 404 он возвращает полноценное сообщение 404 с полной веб-страницей и html и т.д.

Веб-браузер интерпретирует его как .js, тогда как его просто веб-страница говорит, что требуемый файл не найден.

Это может работать для

Ответ 11

Для меня это произошло только на некоторых страницах, потому что я использовал window.location вместо $location.url(...);. Это устранило мою проблему. Потребовалось время, чтобы выяснить:)

Ответ 12

У меня возникла эта проблема при использовании веб-фреймворка и исправлена ​​его перемещением соответствующих файлов javascript в указанную (в рамках) папку javascript.

Ответ 13

Общепринятая вещь, когда это происходит, заключается в том, что вы просто забыли включить type в свои вызовы script. Вам нужно будет установить его явно, так как это - согласно W3 - требуется:

type (content-type): Этот атрибут указывает язык сценариев содержимого элемента и переопределяет язык сценариев по умолчанию. Язык сценариев задается как тип содержимого (например, "text/javascript"). Авторы должны указать значение для этого атрибута. Для этого атрибута нет значения по умолчанию.

Тем не менее кажется, что браузеры имеют значение по умолчанию plain/text.

Пример:

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

Вы также можете установить значение по умолчанию для этого расширения файла в вашей конфигурации Apache:

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

Ответ 14

Если его IIS убедитесь, что под вашим common HTTP Features включен Static Content

Ответ 15

У меня была такая же ошибка и, наконец, (в моем конкретном случае), я обнаружил проблему в дескрипторе развертывания (web.xml)

Проблема:

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

решение:

<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>

Ответ 16

Если вы используете Spring MVC, вы можете добавить следующий тег mvn, чтобы исключить файл ресурсов из Spring Servlet

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

Ответ 17

В моем случае сервер отправил правильный Content-Type, но с неправильным Content-Encoding. Убедитесь, что вы только установили Content-Encoding: gzip для gzipped ресурсов. Кроме того, после того, как я исправил заголовки на сервере (в моем случае, Google Cloud Storage), мне пришлось подождать несколько минут, чтобы правильно отразить изменения из-за кэширования.

Ответ 18

Если вы используете AdonisJS (REST API, например), один из способов избежать этого - определить заголовок ответа следующим образом:

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

Ответ 19

У меня была такая же проблема при попытке изменить фоновое изображение в массиве через javascript (в этом случае jQuery).

В любом случае.

Вместо этого:

m.setStyle('background-image','url(/templates/site/images/style5/'+backgs[i]+')')

сделайте следующее:

eval("m.setStyle('background-image','url(/templates/site/images/style5/'+backgs[i]+')')");

javascript Chrome прикручивается при попытке проанализировать переменную внутри элемента, структурированного с помощью '. В моем случае он остановился непосредственно перед вставкой массива изображений. Вместо синтаксического анализа изображения url + image (внутри массива) он обрабатывал только URL-адрес изображения.

Вам, вероятно, придется искать внутри кода и видеть, где это происходит. FF, IE и все остальные не имеют этой проблемы.

Ответ 20

Ответ на сообщение здесь от simon-sarris помог мне.

Это помогло мне решить мою проблему.

Установщик Visual Studio должен добавить ошибочную строку в реестр.

откройте regedit и загляните в этот раздел реестра:

enter image description here

Посмотрите на этот ключ? Ключ типа содержимого? измените его значение с текста /plain на текст /javascript.

Наконец, хром может снова дышать.

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

В любом случае, я надеюсь, что это исправляет и это для вас!

Не забывайте перезагружать систему после изменений.