O Chrome diz "Recurso interpretado como script, mas transferido com o tipo MIME text / plain.", O que fornece?

316

No FF e tudo, meu javascript funciona bem. Mas no Chrome, essa mensagem é exibida:

Recurso interpretado como script, mas transferido com o tipo MIME text / plain.

Eu verifiquei todas as tags de script e todas elas têm o MIME type="text/javascript" . Até o diz com jquery e jquery ui. O que há de errado com o Chrome?

Qual é o problema e a correção para isso? É algo que tenho que mudar nas 'opções' do navegador ou do servidor, ou preciso ajustar meu código?

Shaoz
fonte
14
Algum código seria útil. Nunca culpe o compilador (navegador) primeiro, por mais tentador que seja, porque você quase sempre se engana.
msw
por uma questão de curiosidade, você está usando o html5?
26611 bollo

Respostas:

203

Isso significa que o servidor está enviando uma resposta Javascript HTTP com

Content-Type: text/plain

Você precisa configurar o servidor para enviar uma resposta JavaScript com

Content-Type: application/javascript
SLaks
fonte
3
Estou usando o Weblogic Server 11g, mas não sei onde posso configurar o MIME nele. Por favor, você pode me mostrar o caminho?
Shaoz 12/08/10
6
Hmm, e quando não há servidor, mas o script é realmente um arquivo JSONP no seu sistema de arquivos local? Acho que apenas ignore o aviso, já que não é sério e está além do seu controle?
Hippietrail
2
Ele deve ser content-type:application/javascript, porém, application/x-javascripté não um RFC padrão ou ECMAScript.
Jasdeep Khalsa
Existem muitas perguntas semelhantes. Esta resposta foi uma solução fácil para mim: stackoverflow.com/a/12057490/1617395
Joe Leo
@ JoeLeo: Isso é para o IIS.
SLaks
124

Isso não tem nada a ver com jQuery ou qualquer peculiaridade do código de script do lado do cliente. É um problema do lado do servidor : O servidor (aplicativo do lado) não está enviando o campo de cabeçalho HTTP esperadoContent-Type para o recurso de script do lado do cliente. Isso acontece se o servidor da Web estiver insuficientemente configurado, configurado incorretamente ou se um aplicativo do lado do servidor (por exemplo, PHP) estiver gerando o recurso de script do lado do cliente.

Os tipos de mídia MIME adequados para implementações do ECMAScript como JavaScript incluem:

  • text/javascript(registrado como obsoleto , não obsoleto; mas ainda válido e com melhor suporte )
  • text/ecmascript(registrado como obsoleto , não obsoleto; mas ainda válido )
  • application/javascript
  • application/ecmascript

Eles não incluem application/x-javascript, pois os tipos de mídia MIME listados acima são os registrados na árvore de padrões até agora (portanto, não há necessidade e não deve haver necessidade de usar mais os experimentais). Cf. RFC 4329, "Tipos de Mídia de Script" (2005 CE) e meu Caso de Teste: Suporte para Tipos de Mídia de Script .

Uma solução é configurar o servidor, se possível, como já recomendado. Para o Apache, isso pode ser tão simples quanto adicionar a diretiva

AddType text/javascript .js

(consulte a documentação do servidor HTTP Apache para obter detalhes).

Mas se o recurso de script do lado do cliente for gerado por um aplicativo do servidor, como o PHP, será necessário definir o Content-Typevalor do campo de cabeçalho explicitamente, pois o padrão é provável text/html:

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

(Essas declarações e outras semelhantes devem ocorrer antes de qualquer outra saída - consulte o manual do PHP -, caso contrário, o corpo da mensagem HTTP já foi iniciado e é tarde demais para enviar mais campos de cabeçalho.)

A geração do lado do servidor pode ocorrer facilmente com um recurso de script do lado do cliente, mesmo se você tiver arquivos .js simples no servidor, se os comentários forem removidos enquanto são exibidos, se todos estiverem agrupados em uma única resposta grande (para reduzir a número de solicitações, que podem ser mais eficientes) ou são minimizados pelo aplicativo do servidor de qualquer outra maneira.

Orelhas pontudas
fonte
1
E se não tivermos acesso ao servidor?
Adonis K.Kakoulidis
1
Encontre alguém que tenha.
PointedEars
Muito obrigado por esta explicação. Muitas pessoas dizem algo arrogante como 'basta enviar JSONP kid, você deve saber como fazê-lo'. Quando o tempo necessário para explicá-lo adequadamente como você tem, fica claro como o dia. Isso corrigiu um problema que tive por várias semanas. Obrigado novamente!
@ Rick-777: Não aprecio que você mude minha resposta sem sequer comentar sua alteração. Se você ler a minha resposta com cuidado, você percebe por que eu recomendo text/javascriptmais application/javascript. Se você tem motivos para acreditar que essa application/javascripté a melhor resposta agora, o mínimo que você deve fazer é se explicar em um comentário. É inadequado que exija o mecanismo de notificação do Stack Overflow para que eu fique ciente de suas alterações. Reverti suas alterações, que chamo de falsificação , para as respostas a esta pergunta, onde as considero inapropriadas.
PointedEars 27/05
19

Para servidores de aplicativos Java, como o Weblogic

1) Verifique se o seu arquivo weblogic.xml está livre de erros

como este:

    <?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) Adicione um tipo MIME para javascript ao seu arquivo web.xml :

    ...
        </servlet-mapping>

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

        <welcome-file-list>
    ...

Isso também funcionará para outros contêineres Java - o Tomcat etc. application/javascripté atualmente o único tipo mime válido; outros como text/javascriptforam preteridos.

3) Pode ser necessário limpar o cache do navegador ou pressionar CTRL-F5

egallardo
fonte
7

Eu tive esse problema e descobri como corrigi-lo.

Isso acontece quando o arquivo de estilo (CSS) está em uma codificação diferente do arquivo PHP que faz referência ao arquivo .css

Por exemplo, o uso do jQuery.js na codificação Unix e do index.php no UTF-8 causará esse problema; portanto, é necessário torná-los UTF-8 ou qualquer outra codificação, desde que iguais.

mak
fonte
7

Se você estiver gerando seu javascript com um arquivo php, adicione-o como o início do seu arquivo:

<?php Header("Content-Type: application/x-javascript; charset=UTF-8"); ?>
mopsyd
fonte
Se você tiver um cabeçalho diferente definido, substitua-o para não obter um erro.
Mpsyd
1
Juntamente com o post da PointedEars, isso me ajudou a corrigir um problema que aparentemente não tinha resposta, e eu estou atormentando meu cérebro há semanas. Muito obrigado: D Por que é quando eu digito no google "como definir os cabeçalhos no documento PHP" Eu recebo 1000 resultados errados que não me dizem nada sobre como fazer isso, eu não sei, mas finalmente encontrei sua postagem lol
3

No httpd.conf do seu apache, basta adicionar uma linha:

AddType application/x-javascript .js
Ruslan Abuzant
fonte
Minha entrada ".js" tinha "application / javascript" nos tipos MIME do IIS 8. Quando mudei a entrada ".js" para "application / x-javascript", funcionou! Isso se originou de um aplicativo ExtJS / ASP.NET / ExtDirect4DotNet
MacGyver
3

Recebi esta mensagem de depuração por um motivo mais absurdo do que as outras respostas aqui: Esta é a mensagem de erro recebida quando você não dorme o suficiente e faz referência a um arquivo js usando a sintaxe de um arquivo css. Como em,

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

ao invés de

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

Pensei em colocar isso aqui porque esta é a primeira postagem que aparece ao procurar a mensagem de erro.

Robert Townley
fonte
2

Problema estranho, mas isso me ajudou a resolver meu problema. Às vezes, até as coisas mais fáceis são difíceis de entender ...

Em vez de usar /js/main.cssna minha tag de script, useijs/main.css

SIM , realmente fez a diferença. Estou sentado no WAMP / Windows e não tinha um vhost, mas apenas useilocalhost/<project>

Se eu me referir, /js/main.cssentão eu me refiro localhost/css/main.csse não alocalhost/<project>/css/main.css

Quando você pensa sobre isso, é bastante óbvio, mas se alguém se deparar com isso, pensei em compartilhar essa resposta.

bestprogrammerintheworld
fonte
1

Verifique se os arquivos js realmente existem no servidor. Eu tive esse problema e descobri que os arquivos js não haviam sido carregados no servidor e, em vez disso, o servidor estava retornando a página html - que era o documento padrão configurado no servidor (por exemplo, default.html)

Steve Mc
fonte
1

Se você está trabalhando no Joomla! e recebendo esse erro irritante ao tentar incluir um .jsarquivo JavaScript ( ), a solução a seguir é para você.

O problema mais provável é que você está tentando incluir um .js arquivo que não existe , ou que apenas extraviou.js e quando o Joomla! não encontrar um recurso, em vez da mensagem 404 genérica, ele retornará uma mensagem 404 completa com uma página da Web e html completos etc.

O navegador está interpretando como se fosse .jsapenas uma página da web dizendo que o arquivo necessário não foi encontrado .

Isso pode funcionar para

Mohd Abdul Mujib
fonte
1

Para mim, isso só aconteceu em algumas páginas porque eu usei em window.locationvez de $location.url(...);Isso corrigiu o meu problema. Demorou um pouco para descobrir :)

tfa
fonte
0

Eu tive esse problema ao usar uma estrutura da Web e a corrigi movendo os arquivos javascript relevantes para a pasta javascript designada (pela estrutura).

JJ.
fonte
0

Uma coisa comum quando isso acontece é se você simplesmente esqueceu de incluir as typechamadas de script. Você precisará defini-lo explicitamente, pois é - de acordo com o W3 - necessário :

type(tipo de conteúdo): este atributo especifica a linguagem de script do conteúdo do elemento e substitui a linguagem de script padrão. A linguagem de script é especificada como um tipo de conteúdo (por exemplo, "text/javascript"). Os autores devem fornecer um valor para este atributo. Não há valor padrão para este atributo.

Ainda assim, parece que os navegadores têm um valor padrão de plain/text.

Exemplo:

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

Você também pode definir um padrão para essa extensão de arquivo na configuração do Apache:

<IfModule mod_mime.c>
    AddType text/javascript .js
</IfModule>
kaiser
fonte
0

Se o IIS tiver certeza de que common HTTP Featuresvocê está Static Contentativado

varun
fonte
0

Eu tive o mesmo erro e finalmente (no meu caso particular) encontrei um problema no descritor de implantação (web.xml)

O problema:

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

a solução:

<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>
Daniel Kennedy
fonte
0

Se você estiver usando o Spring MVC, poderá adicionar a seguinte tag mvn para excluir o arquivo de recursos do Spring Dispatch Servlet

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

No meu caso, o servidor estava enviando o correto, Content-Typemas com um incorreto Content-Encoding. Certifique-se de definir apenas Content-Encoding: gziprecursos com gzip. Além disso, depois de corrigir os cabeçalhos no servidor (no meu caso, o Google Cloud Storage), tive que esperar alguns minutos para refletir adequadamente as alterações devido ao cache.

falsarella
fonte
0

Se você estiver usando o AdonisJS (API REST, por exemplo), uma maneira de evitar isso é definir o cabeçalho da resposta da seguinte maneira:

response.safeHeader('Content-type', 'application/json')
Billal Begueradj
fonte
-1

Eu estava tendo o mesmo problema ao tentar alterar as imagens de fundo em uma matriz por javascript (jQuery neste caso).

De qualquer forma.

Em vez disso:

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

faça isso:

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

O javascript do Chrome é ferrado ao tentar analisar uma variável dentro de um elemento estruturado com '. No meu caso, parou imediatamente antes da inserção da matriz de imagens. Em vez de analisar o URL da imagem + o nome da imagem (dentro da matriz), estava analisando apenas o URL da imagem.

Você provavelmente precisará pesquisar dentro do código e ver onde isso acontece. FF, IE e todos os outros não têm esse problema.

Marco G.
fonte
4
Não use evalse você puder ajudá-lo: javascripttoolbox.com/bestpractices/#eval
indra
-1

A resposta postada aqui por simon-sarris me ajudou.

Isso me ajudou a resolver meu problema.

O instalador do Visual Studio deve ter adicionado uma linha incorreta ao registro.

abra o regedit e dê uma olhada nesta chave do registro:

insira a descrição da imagem aqui

Vê essa chave? A chave do tipo de conteúdo? altere seu valor de text / plain para text / javascript.

Finalmente, o cromo pode respirar com facilidade novamente.

Devo observar que nem o Tipo de Conteúdo nem o PercievedType existem por padrão no Windows 7, portanto, você provavelmente poderá excluir os dois com segurança, mas o mínimo que você precisa fazer é essa edição.

Enfim, espero que isso conserte isso para você também!

Não se esqueça de reiniciar o sistema após as alterações.

farsa, falso
fonte
Oi farsa. Plágio é ruim. (mmmmkay?) Editei sua resposta para remover o plágio de acordo com as diretrizes da SO .
Samuel Harmer