Chrome说“资源解释为脚本,但传输与MIME类型文本/普通。",什么给?

在FF和所有,我的javascript工作良好。但在Chrome中,它会给出这样的信息:

资源解释为脚本,但传输与MIME类型文本/纯。

我已经检查了所有的脚本标签,他们都有MIME type="text/javascript"。它甚至说jquery和jquery ui。Chrome出了什么问题?

问题是什么,解决方法是什么?它是我必须改变浏览器的“选项”,还是来自服务器,或者我必须调整我的代码?

442193 次浏览

这意味着服务器正在发送Javascript HTTP响应

Content-Type: text/plain

您需要配置服务器以发送JavaScript响应

Content-Type: application/javascript

对于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)在web . xml文件中添加javascript的mime类型:

    ...
</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 (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和其他所有的都没有这个问题。

在apache的httpd.conf中,只需添加这样一行:

AddType application/x-javascript .js

这个没有什么与jQuery或任何客户端脚本代码有关。这是一个服务器端问题:服务器(端应用程序)没有为客户端脚本资源发送预期的HTTP Content-Type报头字段值。如果Web服务器配置不充分、配置错误,或者服务器端应用程序(例如,PHP)正在生成客户端脚本资源,就会发生这种情况。

适合ECMAScript实现(如JavaScript)的MIME媒体类型包括:

  • text/javascript(注册为过时了,未弃用;但仍然有效的,和最好的支持)
  • text/ecmascript(注册为过时了,未弃用;但仍然有效的)
  • application/javascript
  • application/ecmascript

它们确实包含application/x-javascript,因为上面列出的MIME媒体类型现在已经在标准树中注册了(所以没有必要,也不应该再使用实验性的媒体类型)。Cf. 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文件,如果在提供注释时从它们中删除注释,如果它们都被打包到一个大响应中(以减少请求的数量,这可能更有效),或者服务器端应用程序以任何其他方式最小化它们。

我遇到了这个问题,我找到了解决它的方法。

当样式(CSS)文件的编码与引用.css文件的PHP文件的编码不同时,就会发生这种情况

例如,使用Unix编码的jQuery.js和使用UTF-8编码的index.php会导致这个问题,所以你必须让它们都是UTF-8或任何其他编码,只要它们是相同的。

检查你的js文件是否在服务器上存在。我有这个问题,发现js文件没有上传到服务器,服务器实际上是返回html页面,而不是-这是服务器上配置的默认文档(如default.html)

我在使用web框架时遇到了这个问题,并通过将相关的javascript文件移动到指定的(由框架)javascript文件夹中来修复它。

如果你用一个php文件生成javascript,添加这个作为你的文件的开头:

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

发生这种情况的常见情况是,如果你只是被遗忘的在脚本调用中包含type。你必须显式地设置它,因为它是-根据W3 - 要求:

type (content-type):此属性指定元素内容的脚本语言,并覆盖默认脚本语言。脚本语言被指定为内容类型(例如,"text/javascript")。作者必须为该属性提供一个值。这个属性有no默认值 . /em> . /em>

尽管如此,浏览器似乎有一个默认值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

我有同样的错误,最后(在我的特殊情况下),我发现部署描述符(web.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/"/>

simon-sarris发布的答案在这里帮助了我。

这帮我解决了我的问题。

Visual Studio安装程序一定在注册表中添加了错误行。

打开regedit,看看这个注册表项:

enter image description here

看到那把钥匙了吗?内容类型键?将其值从text/plain更改为text/javascript。

终于,铬又可以松一口气了。

我应该指出的是,在Windows 7上,Content Type和PercievedType都是默认的,所以你可能可以安全地删除它们,但你需要做的最低限度是编辑。

不管怎样,我希望这也能解决你的问题!

更改后不要忘记重新启动系统。

奇怪的问题,但这帮我解决了我的问题。有时候,即使是最简单的事情也很难弄清楚……

代替使用 /js/main.css在我的脚本标签中,我使用了js/main.css

是的,它确实有所不同。我坐在WAMP / Windows和我没有一个vhost,但只是使用localhost/<project>

如果我引用了/js/main.css,那么我引用了localhost/css/main.css而不是localhost/<project>/css/main.css

当你想到它的时候,这是很明显的,但如果有人偶然发现了这个问题,我想我会分享这个答案。

如果您正在使用Joomla!并且在尝试包含(.js) JavaScript文件时得到这个恼人的错误,那么下面的解决方案适合你。

最可能的问题是你试图包含一个.js 不存在的文件,或者你只是放错了.js文件,当Joomla!如果没有找到资源,那么它将返回一个完整的404消息,其中包含完整的网页和HTML等。

web浏览器将它解释为.js,而它只是一个网页,说所需的文件没有发现

这适用于

对我来说,它只发生在一些页面上,因为我使用window.location而不是$location.url(...);这解决了我的问题。花了一段时间才弄明白:)

在我的例子中,服务器发送了正确的Content-Type,但却发送了不正确的Content-Encoding。确保你只为gzip资源设置Content-Encoding: gzip。此外,在我修复了服务器中的头文件(在我的例子中,是谷歌云存储)后,我不得不等待几分钟以正确反映由于缓存造成的更改。

我收到这条调试消息的原因比这里的其他答案更愚蠢:这是当你没有得到足够的睡眠并使用css文件的语法引用js文件时收到的错误消息。如,

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

而不是

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

我想我应该把这个放在这里,因为这是搜索错误消息时出现的第一篇文章。

如果你正在使用AdonisJS (REST API,例如),一种避免这种情况的方法是这样定义响应头:

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