Chrome dice "Recurso interpretado como script pero transferido con texto tipo MIME / sin formato", ¿qué da?

316

En FF y todo, mi javascript funciona bien. Pero en Chrome da este mensaje:

Recurso interpretado como script pero transferido con texto tipo MIME / sin formato.

He revisado todas las etiquetas de script y todas tienen el MIME type="text/javascript". Incluso lo dice con jquery y jquery ui. ¿Qué le pasa a Chrome?

¿Cuál es el problema y la solución para esto? ¿Es algo que tengo que cambiar en las 'opciones' del navegador o es desde el servidor o tengo que modificar mi código?

Shaoz
fuente
14
Algún código sería útil. Nunca culpes al compilador (navegador) primero, no importa cuán tentador sea, porque casi siempre te equivocarás.
msw
por curiosidad, ¿estás usando html5?
bollo

Respuestas:

203

Significa que el servidor está enviando una respuesta HTTP Javascript con

Content-Type: text/plain

Debe configurar el servidor para enviar una respuesta de JavaScript con

Content-Type: application/javascript
SLaks
fuente
3
Estoy usando Weblogic Server 11g, pero no sé dónde puedo configurar el MIME en él. Por favor, ¿puedes mostrarme el camino?
Shaoz
66
Hmm, ¿qué pasa cuando no hay servidor, pero el script es en realidad un archivo JSONP en su sistema de archivos local? Supongo que simplemente ignorar la advertencia, ya que no es grave y está fuera de tu control.
hippietrail
2
Sin content-type:application/javascriptembargo, debería ser , noapplication/x-javascript es un estándar RFC o ECMAScript.
Jasdeep Khalsa
Hay muchas preguntas similares. Esta respuesta fue una solución fácil para mí: stackoverflow.com/a/12057490/1617395
Joe Leo
@JoeLeo: Eso es para IIS.
SLaks
124

Esto no tiene nada que ver con jQuery o cualquier peculiaridad del código de script del lado del cliente. Es un problema del lado del servidor : el servidor (aplicación del lado) no envía el valor esperado del Content-Typecampo de encabezado HTTP para el recurso de script del lado del cliente. Esto sucede si el servidor web no está configurado adecuadamente, está mal configurado o si una aplicación del lado del servidor (por ejemplo, PHP) está generando el recurso de script del lado del cliente.

Los tipos de medios MIME adecuados para implementaciones de ECMAScript como JavaScript incluyen:

  • text/javascript(registrado como obsoleto , no en desuso, pero aún válido y mejor soportado )
  • text/ecmascript(registrado como obsoleto , no en desuso, pero aún válido )
  • application/javascript
  • application/ecmascript

Ellos no son application/x-javascript, como los tipos de medios MIME mencionados anteriormente son los registrados en el árbol de normas por ahora (lo que no hay necesidad, y no debe haber ninguna necesidad, utilizar los experimentales más). Cf. RFC 4329, "Tipos de medios de secuencias de comandos" (2005 CE) y mi caso de prueba: Soporte para tipos de medios de secuencias de comandos .

Una solución es configurar el servidor si es posible, como ya se recomienda. Para Apache, esto puede ser tan simple como agregar la directiva

AddType text/javascript .js

(Consulte la documentación del Servidor Apache HTTP para más detalles).

Pero si el recurso de script del lado del cliente es generado por una aplicación del lado del servidor, como PHP, entonces es necesario establecer el Content-Typevalor del campo de encabezado explícitamente, ya que es probable que el valor predeterminado sea text/html:

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

(Esa y otras declaraciones similares deben aparecer antes que cualquier otra salida; consulte el manual de PHP ; de lo contrario, se considera que el cuerpo del mensaje HTTP ya ha comenzado y es demasiado tarde para enviar más campos de encabezado).

La generación del lado del servidor puede pasar fácilmente a un recurso de secuencia de comandos del lado del cliente, incluso si tiene archivos .js simples en el servidor, si los comentarios se eliminan a medida que se sirven, si todos se empaquetan en una gran respuesta (para reducir el número de solicitudes, que pueden ser más eficientes), o la aplicación del lado del servidor las minimiza de cualquier otra manera.

Orejas puntiagudas
fuente
1
¿Qué pasa si no tenemos acceso al servidor?
Adonis K. Kakoulidis
1
Encuentra a alguien que tenga.
PointedEars
Muchas gracias por esta explicación. Demasiadas personas dicen algo arrogante como 'solo envía a JSONP kid, deberías saber cómo hacerlo'. Cuando se toma el tiempo para explicarlo adecuadamente como lo ha hecho, está claro como el día. Esto ha solucionado un problema que he tenido durante varias semanas. ¡Gracias de nuevo!
@ Rick-777: No aprecio que cambies mi respuesta sin siquiera comentar tu cambio. Si usted lee mi respuesta con cuidado, se da cuenta de eso recomiendo text/javascriptmás application/javascript. Si tiene razones para creer que esa application/javascriptes la mejor respuesta ahora, entonces lo menos que debe hacer es explicarse en un comentario. Es inapropiado que requiera el mecanismo de notificación de Stack Overflow para que me dé cuenta de sus cambios. He revertido sus cambios, que llamo falsificación , a las respuestas a esta pregunta donde las considero inapropiadas.
PointedEars
19

Para servidores de aplicaciones Java como Weblogic

1) Asegúrese de que su archivo weblogic.xml esté libre de errores

como éste:

    <?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) Agregue un tipo mime para javascript a su archivo web.xml :

    ...
        </servlet-mapping>

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

        <welcome-file-list>
    ...

Esto también funcionará para otros contenedores Java: Tomcat, etc. application/javascriptes actualmente el único tipo mime válido; otros como text/javascripthan quedado en desuso.

3) Es posible que deba limpiar el caché del navegador o presionar CTRL-F5

egallardo
fuente
7

Tuve este problema y descubrí cómo solucionarlo.

Ocurre cuando el archivo de estilo (CSS) está en una codificación diferente del archivo PHP que hace referencia al archivo .css

Por ejemplo, usar jQuery.js en la codificación Unix y usar index.php en UTF-8 causará este problema, por lo que debe convertirlos en UTF-8 o en cualquier otra codificación siempre que sea igual.

mak
fuente
7

Si está generando su javascript con un archivo php, agregue esto como el comienzo de su archivo:

<?php Header("Content-Type: application/x-javascript; charset=UTF-8"); ?>
mopsyd
fuente
Si tiene un encabezado diferente definido, reemplácelo para que no obtenga un error.
mopsyd
1
Junto con la publicación de PointedEars, esto me ha ayudado a solucionar un problema que aparentemente no tenía respuesta y he estado atormentando mi cerebro durante semanas. Muchas gracias: D ¿Por qué es cuando escribo en Google "cómo configurar los encabezados en el documento PHP" obtengo 1000 resultados erróneos que no me dicen nada sobre cómo hacerlo, no lo sé, pero finalmente encontré tu publicación jajaja
3

En su httpd.conf de apache, simplemente agregue una línea de este tipo:

AddType application/x-javascript .js
Ruslan Abuzant
fuente
Mi entrada " .js" tenía "application / javascript" en IIS 8 Tipos MIME. Cuando cambié la entrada " .js" a "application / x-javascript", ¡funcionó! Esto se originó en una aplicación ExtJS / ASP.NET / ExtDirect4DotNet
MacGyver
3

Recibí este mensaje de depuración por una razón más tonta que las otras respuestas aquí: este es el mensaje de error recibido cuando no duermes lo suficiente y haces referencia a un archivo js utilizando la sintaxis para un archivo css. Como en,

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

más bien que

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

Pensé en poner esto aquí porque esta es la primera publicación que aparece al buscar el mensaje de error.

Robert Townley
fuente
2

Problema extraño, pero esto me ayudó a resolver mi problema. A veces, incluso las cosas más fáciles son difíciles de entender ...

En lugar de usar /js/main.cssen mi etiqueta de script, uséjs/main.css

, en realidad marcó la diferencia. Estoy sentado en WAMP / Windows y no tenía un vhost pero solo lo usélocalhost/<project>

Si me refiero a /js/main.css, me refiero localhost/css/main.cssy no alocalhost/<project>/css/main.css

Cuando lo piensas, es bastante obvio, pero si alguien se topa con esto, creo que compartiría esta respuesta.

bestprogrammerintheworld
fuente
1

Verifique que sus archivos js realmente existan en el servidor. Tuve este problema y descubrí que los archivos js no se habían subido al servidor y el servidor en realidad estaba devolviendo la página html, que era el documento predeterminado configurado en el servidor (por ejemplo, default.html)

Steve Mc
fuente
1

Si estás trabajando en Joomla! y obteniendo este molesto error al intentar incluir un .jsarchivo ( ) de JavaScript, entonces la siguiente solución es para usted.

El problema más probable es que está intentando incluir un .js archivo que no está allí , o simplemente lo extravió .js, y cuando Joomla! no encuentra un recurso, luego, en lugar del mensaje 404 genérico, devuelve un mensaje 404 completo con una página web completa y html, etc.

El navegador web lo interpreta como si fuera .jssolo una página web que dice que no se encontró el archivo requerido .

Esto puede funcionar para

Mohd Abdul Mujib
fuente
1

Para mí, solo sucedió en algunas páginas porque usé en window.locationlugar de $location.url(...);Esto solucionó mi problema. Tomó un tiempo darse cuenta :)

tfa
fuente
0

Tuve este problema al usar un marco web y lo solucioné moviendo los archivos de JavaScript relevantes a la carpeta de JavaScript designada (por el marco).

JJ
fuente
0

Una cosa común cuando esto sucede es si simplemente ha olvidado incluirlo typeen sus llamadas de guión. Tendrá que configurarlo explícitamente, ya que es, según W3 , requerido :

type(tipo de contenido): este atributo especifica el lenguaje de secuencias de comandos del contenido del elemento y anula el lenguaje de secuencias de comandos predeterminado. El lenguaje de secuencias de comandos se especifica como un tipo de contenido (por ejemplo, "text/javascript"). Los autores deben proporcionar un valor para este atributo. No hay un valor predeterminado para este atributo.

Aún así parece que los navegadores tienen un valor predeterminado de plain/text.

Ejemplo:

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

También podría establecer un valor predeterminado para esa extensión de archivo en su configuración de Apache:

<IfModule mod_mime.c>
    AddType text/javascript .js
</IfModule>
emperador
fuente
0

Si es IIS, asegúrese de que debajo de common HTTP Featuresusted haya Static Contentactivado

varun
fuente
0

Tuve el mismo error y finalmente (en mi caso particular) encontré un problema en el descriptor de implementación (web.xml)

El problema:

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

la solución:

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

Si está utilizando Spring MVC, puede agregar la siguiente etiqueta mvn para excluir el archivo de recursos del Servlet de envío de Spring

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

En mi caso, el servidor estaba enviando el correcto Content-Typepero con un incorrecto Content-Encoding. Asegúrese de configurar solo los Content-Encoding: gziprecursos comprimidos. Además, después de arreglar los encabezados en el servidor (en mi caso, Google Cloud Storage), tuve que esperar unos minutos para reflejar adecuadamente los cambios debidos al almacenamiento en caché.

falsarella
fuente
0

Si está utilizando AdonisJS (API REST, por ejemplo), una forma de evitar esto es definir el encabezado de respuesta de esta manera:

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

Estaba teniendo el mismo problema al intentar cambiar las imágenes de fondo en una matriz a través de javascript (jQuery en este caso).

De todas formas.

En lugar de esto:

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

hacer esto:

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

JavaScript de Chrome se atornilla al intentar analizar una variable dentro de un elemento estructurado con '. En mi caso, se detuvo justo antes de insertar la matriz de imágenes. En lugar de analizar la url de la imagen + el nombre de la imagen (dentro de la matriz), estaba analizando solo la url de la imagen.

Probablemente necesite buscar dentro del código y ver dónde sucede. FF, IE y todos los demás no tienen este problema.

Marco G.
fuente
44
No lo use evalsi puede ayudarlo: javascripttoolbox.com/bestpractices/#eval
indra
-1

La respuesta publicada aquí por Simon-Sarris me ayudó.

Esto me ayudó a resolver mi problema.

El instalador de Visual Studio debe haber agregado una línea errante al registro.

abra regedit y eche un vistazo a esta clave de registro:

ingrese la descripción de la imagen aquí

¿Ves esa llave? La clave de tipo de contenido? cambie su valor de text / plain a text / javascript.

Finalmente el cromo puede respirar tranquilo nuevamente.

Debo tener en cuenta que ni el Tipo de contenido ni el Tipo de contenido están allí de forma predeterminada en Windows 7, por lo que probablemente pueda eliminarlos con seguridad, pero lo mínimo que debe hacer es editar.

De todos modos, ¡espero que esto también te lo solucione!

No olvide reiniciar su sistema después de los cambios.

impostor
fuente
Hola farsa El plagio es malo. (mmmmkay?) He editado su respuesta para eliminar el plagio de acuerdo con las pautas de SO .
Samuel Harmer