Chrome says "Resource interpreted as script but transferred with MIME type text/plain.", what gives?

Google ChromeMime Types

Google Chrome Problem Overview


In FF and all, my javascript works fine. But in Chrome it gives this message: >Resource interpreted as script but transferred with MIME type text/plain.

I have checked all the script tags and they all have the MIME type="text/javascript". It even says so with jquery and jquery ui. What is wrong with Chrome?

What's the problem and the fix for this? Is it something I have to change in the 'options' of the browser or is it from the server, or do I have to tweak my code?

Google Chrome Solutions


Solution 1 - Google Chrome

It means that the server is sending a Javascript HTTP response with

Content-Type: text/plain

You need to configure the server to send a JavaScript response with

Content-Type: application/javascript

Solution 2 - Google Chrome

This has nothing to do with jQuery or any quirk of client-side script code. It is a server-side issue: The server(-side application) is not sending the expected HTTP Content-Type header field value for the client-side script resource. This happens if the Web server is insufficiently configured, misconfigured, or a server-side application (e. g., PHP) is generating the client-side script resource.

Proper MIME media types for ECMAScript implementations like JavaScript include:

  • text/javascript (registered as obsolete, not deprecated; but still valid, and supported best)
  • text/ecmascript (registered as obsolete, not deprecated; but still valid)
  • application/javascript
  • application/ecmascript

They do not include application/x-javascript, as the MIME media types listed above are the ones registered in the standards tree by now (so there is no need, and there should be no want, to use experimental ones anymore). Cf. RFC 4329, "Scripting Media Types" (2005 CE) and my Test Case: Support for Scripting Media Types.

One solution is to configure the server if possible, as already recommended. For Apache, this can be as simple as adding the directive

AddType text/javascript .js

(see the Apache HTTP Server documentation for details).

But if the client-side script resource is generated by a server-side application, like PHP, then it is necessary to set the Content-Type header field value explicitly, as the default is likely text/html:

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

(That and similar statements must come before any other output – see the PHP manual –, else the HTTP message body is considered to have begun already and it is too late to send more header fields.)

Server-side generation can happen easily to a client-side script resource even if you have plain .js files on the server, if comments are removed from them as they are served, if they are all packed into one large response (to reduce the number of requests, which can be more efficient), or they are minimized by the server-side application in any other way.

Solution 3 - Google Chrome

For Java Application servers such as Weblogic

  1. Make sure your weblogic.xml file is free of errors

like this one:

    <?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) Add a mime type for javascript to your web.xml file:

    ...
        </servlet-mapping>

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

        <welcome-file-list>
    ...

This will also work for other Java containers - Tomcat etc. application/javascript is currently the only valid mime-type; others like text/javascript have been deprecated.

  1. You may need to clear up your browser cache or hit CTRL-F5

Solution 4 - Google Chrome

I had this problem and I figured out how to fix it.

It happens when the style (CSS) file is in a different encoding from the PHP file that references the .css file

For example, using jQuery.js in Unix encoding and using index.php in UTF-8 will cause this problem so you have to make them both UTF-8 or any other encoding as long as it the same.

Solution 5 - Google Chrome

If you're generating your javascript with a php file, add this as the beginning of your file:

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

Solution 6 - Google Chrome

In your apache's httpd.conf, just add such a line:

AddType application/x-javascript .js

Solution 7 - Google Chrome

I received this debug message for a sillier reason than the other answers here: This is the error message received when you don't get enough sleep and reference a js file by using the syntax for a css file. As in,

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

rather than

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

Thought I'd put this up here because this is the first post that comes up when searching for the error message.

Solution 8 - Google Chrome

Weird issue, but this helped me to solve my issue. Sometimes even the easiest things are hard to figure out...

Instead of using /js/main.css in my script-tag I used js/main.css

YES, it did actually make a difference. I'm sitting on WAMP / Windows and I didn't have a vhost but just used localhost/<project>

If I reference to /js/main.css then I reference to localhost/css/main.css and not to localhost/<project>/css/main.css

When you think of it, it's quite obvious but if someone stumbles upon this I thought I would share this answer.

Solution 9 - Google Chrome

Check your js files actually exist on the server. I had this problem and discovered the js files hadn't been uploaded to the server and the server was actually returning the html page instead - which was the default document configured on the server (eg default.html)

Solution 10 - Google Chrome

If you are working on Joomla! and getting this annoying error when trying to include a (.js) JavaScript file, then the following solution is for you.

The most probable problem is that you are trying to include a .js file that isn't there, or you just misplaced that .js file, and when Joomla! doesn't find a resource, then instead of the generic 404 message, it returns a full fledged 404 message with a complete webpage and html etc.

The web browser is interpreting it as .js whereas its just a webpage saying that the required file wasn't found.

This can work for [tag:Joomla2.5][tag:Joomla3.0][tag:Joomla3.1][tag:Joomla3.2][tag:Joomla3.3][tag:Joomla]

Solution 11 - Google Chrome

For me, it only happened on some pages because I used window.location instead of $location.url(...); This fixed my problem. Took a while to figure out :)

Solution 12 - Google Chrome

I had this problem while using a web framework and fixed it by moving the relevant javascript files into the designated (by the framework) javascript folder.

Solution 13 - Google Chrome

A common thing when this happens is if you've simply forgotten to include the type in your script calls. You'll have to set it explicitly, as it is - according to W3 - required:

> type (content-type): This attribute specifies the scripting language of the element's contents and overrides the default scripting language. The scripting language is specified as a content type (e.g., "text/javascript"). Authors must supply a value for this attribute. There is no default value for this attribute.

Still it seems that browsers have a a default value of plain/text.

Example:

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

You could as well set a default for that file extension in your Apache configuration:

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

Solution 14 - Google Chrome

If its IIS make sure That Under your common HTTP Features you have Static Content turned on

Solution 15 - Google Chrome

I had the same error and finally (in my particular case) I found a problem in the deployment descriptor (web.xml)

The problem:

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

the solution:

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

Solution 16 - Google Chrome

If you are using Spring MVC, you can add following mvn tag to exclude resources file from Spring Dispatch Servlet

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

Solution 17 - Google Chrome

In my case, the server was sending the correct Content-Type but with an incorrect Content-Encoding. Make sure that you only set Content-Encoding: gzip for gzipped resources. Also, after I fixed the headers in the server (in my case, Google Cloud Storage), I had to wait a few minutes to properly reflect the changes due to caching.

Solution 18 - Google Chrome

If you are using AdonisJS (REST API, for instance), one way to avoid this is to define the response header this way:

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

Solution 19 - Google Chrome

I was having the same issue when trying to change a background images in a array through javascript (jQuery in this case).

Anyway.

Instead of this:

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

do this:

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

Chrome javascript gets screwed when trying to parse a variable inside an element structured with ' . In my case it stopped just before the image array being inserted. Instead of parsing the image url + image name (inside the array), it was parsing just the image url.

You probably need to search inside the code and see where it happens. FF, IE and all other don't have this problem.

Solution 20 - Google Chrome

The answer posted here by simon-sarris helped me. > This helped me solve my issue. > > The Visual Studio installer must have added an errant line to the registry. > > open up regedit and take a look at this registry key: > > enter image description here > > See that key? The Content Type key? change its value from text/plain to text/javascript. > > Finally chrome can breathe easy again. > > I should note that neither Content Type nor PercievedType are there by default on Windows 7, so you could probably safely delete them both, but the minimum you need to do is that edit. > > Anyway I hope this fixes it for you too!

Don't forget to restart your system after the changes.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionShaozView Question on Stackoverflow
Solution 1 - Google ChromeSLaksView Answer on Stackoverflow
Solution 2 - Google ChromePointedEarsView Answer on Stackoverflow
Solution 3 - Google ChromeegallardoView Answer on Stackoverflow
Solution 4 - Google ChromemakView Answer on Stackoverflow
Solution 5 - Google ChromemopsydView Answer on Stackoverflow
Solution 6 - Google ChromeRuslan AbuzantView Answer on Stackoverflow
Solution 7 - Google ChromeRobert TownleyView Answer on Stackoverflow
Solution 8 - Google ChromebestprogrammerintheworldView Answer on Stackoverflow
Solution 9 - Google ChromeSteve McView Answer on Stackoverflow
Solution 10 - Google ChromeMohd Abdul MujibView Answer on Stackoverflow
Solution 11 - Google ChrometfaView Answer on Stackoverflow
Solution 12 - Google ChromeJJ.View Answer on Stackoverflow
Solution 13 - Google ChromekaiserView Answer on Stackoverflow
Solution 14 - Google ChromevarunView Answer on Stackoverflow
Solution 15 - Google ChromeDaniel KennedyView Answer on Stackoverflow
Solution 16 - Google Chromesendon1982View Answer on Stackoverflow
Solution 17 - Google ChromefalsarellaView Answer on Stackoverflow
Solution 18 - Google ChromeBillal BegueradjView Answer on Stackoverflow
Solution 19 - Google ChromeMarco G.View Answer on Stackoverflow
Solution 20 - Google ChromeshamView Answer on Stackoverflow