在FF和所有语言中,我的JavaScript正常运行。但是在Chrome中,它会显示以下消息:
资源被解释为脚本,但使用MIME类型的text / plain进行传输。
我已经检查了所有脚本标签,并且都具有MIME type="text/javascript"
。甚至对jquery和jquery ui都这样说。Chrome怎么了?
有什么问题和解决方法?是我必须在浏览器的“选项”中进行更改,还是在服务器中进行更改,还是必须对代码进行调整?
在FF和所有语言中,我的JavaScript正常运行。但是在Chrome中,它会显示以下消息:
资源被解释为脚本,但使用MIME类型的text / plain进行传输。
我已经检查了所有脚本标签,并且都具有MIME type="text/javascript"
。甚至对jquery和jquery ui都这样说。Chrome怎么了?
有什么问题和解决方法?是我必须在浏览器的“选项”中进行更改,还是在服务器中进行更改,还是必须对代码进行调整?
Answers:
这意味着服务器正在通过以下方式发送Javascript HTTP响应:
Content-Type: text/plain
您需要配置服务器以发送JavaScript响应
Content-Type: application/javascript
这与jQuery或客户端脚本代码的任何古怪无关。它是服务器端的问题:服务器(端应用程序)未发送客户端脚本资源的预期HTTP Content-Type
标头字段值。如果Web服务器的配置不足,配置错误,或者服务器端应用程序(例如PHP)正在生成客户端脚本资源,则会发生这种情况。
适用于ECMAScript实现(例如JavaScript)的MIME媒体类型包括:
text/javascript
(已注册为过时,未弃用;但仍然有效,并且支持最佳)text/ecmascript
(已注册为过时,未弃用;但仍然有效)application/javascript
application/ecmascript
它们不包含application/x-javascript
,因为上面列出的MIME媒体类型是现在在标准树中注册的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文件,如果在提供服务时从它们中删除了注释,如果它们都打包成一个大的响应,则可以很容易地在客户端脚本资源上进行服务器端生成。数量(可能更有效)),或者服务器端应用程序以任何其他方式将其最小化。
text/javascript
过application/javascript
。如果您有理由相信现在application/javascript
是更好的答案,那么您至少应该做的就是在评论中说明自己。它需要Stack Overflow的通知机制让我知道您的更改是不合适的。我已将您的更改(我称为fudging)恢复为该问题的答案,但我认为这些答案不适当。
对于Java Application服务器,例如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)将javascript的mime类型添加到您的web.xml文件中:
...
</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
如果要使用php文件生成JavaScript,请将其添加为文件的开头:
<?php Header("Content-Type: application/x-javascript; charset=UTF-8"); ?>
当这种情况发生的一个常见的事情是,如果你只是忘记到包括type
在脚本中调用。你必须明确地设置它,因为它是-根据W3 - 要求:
type
(内容类型):此属性指定元素内容的脚本语言,并覆盖默认脚本语言。脚本语言被指定为内容类型(例如"text/javascript"
)。作者必须为此属性提供一个值。有没有默认值这个属性。
似乎浏览器的默认值为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>
我遇到了同样的错误,最后(在我的特定情况下)我在部署描述符(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/"/>
尝试通过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和所有其他都没有此问题。
eval
如果可以帮助,请不要使用:javascripttoolbox.com/bestpractices/#eval
这帮助我解决了我的问题。
Visual Studio安装程序必须向注册表添加错误行。
打开regedit并查看以下注册表项:
看到那个钥匙吗?内容类型键?将其值从text / plain更改为text / javascript。
最终,铬可以再次轻松呼吸。
我应该注意,Windows 7在默认情况下既没有Content Type也没有PercievedType,因此您可以安全地将它们都删除,但是您要做的最少就是编辑。
无论如何,我希望这也能为您解决!
更改后,请不要忘记重新启动系统。