Chrome говорит: «Ресурс интерпретируется как скрипт, но передается с MIME-типом text / plain.», Что дает? - PullRequest
314 голосов
/ 12 августа 2010

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

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

Я проверил все теги скрипта, и все они имеютMIME type="text/javascript".Это даже говорит так с JQuery и JQuery UI.Что не так с Chrome?

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

Ответы [ 20 ]

203 голосов
/ 12 августа 2010

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

Content-Type: text/plain

. Необходимо настроить сервер для отправки ответа JavaScript с

Content-Type: application/javascript
125 голосов
/ 29 августа 2011

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

Подходящие типы мультимедиа MIME для реализаций ECMAScript, таких как JavaScript, включают:

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

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

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

AddType text/javascript .js

(подробности см. В документации Apache HTTP Server ).

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

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

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

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

19 голосов
/ 20 мая 2011

Для серверов приложений 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 isв настоящее время единственный действительный тип пантомимы;другие, например text/javascript, устарели.

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

8 голосов
/ 19 декабря 2012

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

<?php Header("Content-Type: application/x-javascript; charset=UTF-8"); ?>
7 голосов
/ 26 сентября 2011

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

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

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

3 голосов
/ 20 августа 2016

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

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

, а не

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

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

3 голосов
/ 27 августа 2011

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

AddType application/x-javascript .js
2 голосов
/ 23 февраля 2015

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

Вместо использования /js/main.css в своем скрипте-теге я использовал js/main.css

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

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

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

1 голос
/ 10 июня 2015

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

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

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

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

1 голос
/ 10 июня 2012

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

...