在FF和所有,我的JavaScript工作正常。但在Chrome中,它会提供以下信息:
资源解释为脚本,但使用MIME类型text / plain传输。
我已检查了所有脚本标记,但它们都有MIME type="text/javascript"
。它甚至用jquery和jquery ui这样说。 Chrome有什么问题?
问题及解决方法是什么?我需要在浏览器的“选项”中进行更改,还是从服务器更改,还是必须调整代码?
答案 0 :(得分:203)
这意味着服务器正在使用
发送Javascript HTTP响应Content-Type: text/plain
您需要将服务器配置为使用
发送JavaScript响应Content-Type: application/javascript
答案 1 :(得分:125)
这与jQuery或客户端脚本代码的任何怪癖都有 nothing 。这是服务器端问题:服务器(-side应用程序)未发送客户端脚本资源的预期HTTP Content-Type
header field值。如果Web服务器配置不当,配置错误或服务器端应用程序(例如,PHP)正在生成客户端脚本资源,则会发生这种情况。
适用于ECMAScript实现的适当MIME媒体类型包括:
text/javascript
(注册为已过时,未弃用;但有效,支持最佳)text/ecmascript
(注册为已过时,未弃用;但有效)application/javascript
application/ecmascript
他们不包括application/x-javascript
,因为上面列出的MIME媒体类型现在是标准树中注册的那些(所以没有必要,也没有想要的,再使用实验性的)。参看RFC 4329,“脚本媒体类型”(2005 CE)和我的Test Case: Support for Scripting Media Types。
一种解决方案是尽可能配置服务器,如建议的那样。对于Apache,这可以像添加指令
一样简单AddType text/javascript .js
(有关详细信息,请参阅Apache HTTP Server documentation。)
但是如果客户端脚本资源是由服务器端应用程序(如PHP)生成的,则必须明确设置Content-Type
标头字段值,因为默认值很可能是text/html
:
<?php
header('Content-Type: text/javascript; charset=UTF-8');
// ...
?>
(那个和类似的语句必须在任何其他输出之前 - 参见PHP manual - ,否则HTTP消息体已被认为已经开始,发送更多的头字段为时已晚。)
服务器端生成可以轻松地发生在客户端脚本资源上,即使您在服务器上有简单的.js文件,如果它们被提供时从它们中删除了注释,如果它们都被打包成一个大的响应(减少请求的数量,这可以更高效),或者它们被服务器端应用程序以任何其他方式最小化。
答案 2 :(得分:19)
对于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)将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
答案 3 :(得分:8)
如果您使用php文件生成javascript,请将其添加为文件的开头:
<?php Header("Content-Type: application/x-javascript; charset=UTF-8"); ?>
答案 4 :(得分:7)
我遇到了这个问题,我想出了如何修复它。
当样式(CSS)文件与引用.css文件的PHP文件的编码不同时会发生这种情况
例如,在Unix编码中使用jQuery.js并在UTF-8中使用index.php会导致此问题,因此您必须将它们设置为UTF-8或任何其他编码,只要它们相同即可。
答案 5 :(得分:3)
在你的apache的httpd.conf中,只需添加一行:
AddType application/x-javascript .js
答案 6 :(得分:3)
我收到此调试消息的原因比其他答案更简单:这是当您没有获得足够的睡眠并通过使用css文件的语法引用js文件时收到的错误消息。如,
<link rel='stylesheet' type='text/css' href='clearly_javascript.js'/>
而不是
<script src='clearly_javascript.js'></script>
我以为我会把它放在这里,因为这是搜索错误消息时出现的第一篇文章。
答案 7 :(得分:2)
奇怪的问题,但这有助于我解决我的问题。有时甚至最简单的事情很难弄明白......
而不是使用
我的脚本标记中的/js/main.css
我使用了js/main.css
是,它确实有所作为。我坐在WAMP / Windows上,我没有vhost,只是使用了localhost/<project>
如果我引用/js/main.css
,那么我引用localhost/css/main.css
而不引用localhost/<project>/css/main.css
当你想到它时,它很明显,但如果有人偶然发现这一点,我想我会分享这个答案。
答案 8 :(得分:1)
检查服务器上实际存在的js文件。我有这个问题并发现js文件没有上传到服务器而服务器实际上是返回html页面 - 这是服务器上配置的默认文件(例如default.html)
答案 9 :(得分:1)
对我而言,它只发生在某些页面上,因为我使用window.location
代替$location.url(...);
这解决了我的问题。花了一段时间才弄明白:)
答案 10 :(得分:1)
如果您正在使用Joomla!并且在尝试包含(.js
)JavaScript文件时遇到这个恼人的错误,那么以下解决方案适合您。
最可能出现的问题是,您尝试添加的.js
文件不是,或者您只是错放了.js
文件,以及何时的Joomla!没有找到资源,然后它返回一个完整的网页和HTML等完整的404消息,而不是通用的404消息。
网络浏览器将其解释为.js
,而它只是一个网页,说明所找到的文件未找到。
这适用于joomla2.5 joomla3.0 joomla3.1 joomla3.2 joomla3.3 joomla
答案 11 :(得分:0)
如果您使用的是AdonisJS(例如REST API),一种避免这种情况的方法是通过以下方式定义响应标头:
response.safeHeader('Content-type', 'application/json')
答案 12 :(得分:0)
在我的情况下,服务器发送了正确的Content-Type
,但Content-Encoding
不正确。确保仅为gzip资源设置Content-Encoding: gzip
。此外,在我修复服务器中的标头后(在我的情况下,Google云端存储),我不得不等待几分钟才能正确反映由于缓存而导致的更改。
答案 13 :(得分:0)
如果您使用的是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/"/>
答案 14 :(得分:0)
我遇到了同样的错误,最后(在我的特定情况下)我在部署描述符(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>
答案 15 :(得分:0)
如果其IIS确保您的common HTTP Features
已Static Content
已启用
答案 16 :(得分:0)
发生这种情况时常见的事情是,如果您只是忘记在您的脚本调用中包含type
。根据{{3}} - 必需,您必须明确地设置它:
type
(content-type):此属性指定元素内容的脚本语言,并覆盖默认脚本语言。脚本语言被指定为内容类型(例如,"text/javascript"
)。作者必须为此属性提供值。此属性有 无默认值 。
似乎 browsers 的默认值为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>
答案 17 :(得分:0)
我在使用Web框架时遇到了这个问题,并通过将相关的javascript文件移动到指定的(通过框架)javascript文件夹来修复它。
答案 18 :(得分:-1)
here simon-sarris发布的答案帮助了我。
这帮助我解决了我的问题。
Visual Studio安装程序必须在注册表中添加错误行。
打开注册表并查看此注册表项:
看到那把钥匙?内容类型键?将其值从text / plain更改为text / javascript。
最后,铬可以再次呼吸。
我应该注意,在Windows 7上默认不存在Content Type和PercievedType,因此您可以安全地删除它们,但您需要做的最小值就是编辑。
无论如何,我希望这也能为你解决这个问题!
请勿忘记在更改后重新启动系统。
答案 19 :(得分:-1)
尝试通过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和其他所有都没有这个问题。