Chrome говорит: "ресурс интерпретируется как скрипт, но передается с помощью типа MIME text / plain."что дает?

в FF и все, мой javascript работает нормально. Но в Chrome он дает следующее сообщение:

ресурс интерпретируется как скрипт, но передается с помощью типа MIME text / plain.

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

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

19 ответов


это означает, что сервер отправляет ответ Javascript HTTP с

Content-Type: text/plain

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

Content-Type: application/javascript

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

правильный МИМ типы носителей для реализаций ECMAScript, таких как JavaScript, включают:

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

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

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

AddType text/javascript .js

(см. Apache HTTP-сервер документация для деталей).

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

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

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

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


для серверов приложений 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


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

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

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

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

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


в httpd вашего apache.conf, просто добавьте такую строку:

AddType application/x-javascript .js

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

вместо

/js/main.css в моем скрипте-tag

Я js/main.css

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

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


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

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

, а не

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

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


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


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

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

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

это может работать для joomla2.5joomla3.0joomla3.1joomla3.2joomla3.3для Joomla


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


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


обычная вещь, когда это происходит, если вы просто забыли включить type в скрипте вызовы. Вы должны будете установить его явно, так как это-согласно 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>

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


у меня была такая же ошибка и, наконец, (в моем конкретном случае) я нашел проблему в дескрипторе развертывания (веб.в 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>

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

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

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


у меня была такая же проблема при попытке изменить фоновые изображения в массиве через 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]+')')");

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

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


ответ написал здесь by Симон-Саррис помог мне.

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

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

откройте regedit и посмотрите на этот раздел реестра:

enter image description here

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

наконец chrome снова может дышать легко.

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

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

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