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

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

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

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


当前回答

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

type (content-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>

其他回答

对于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等应用程序/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和其他所有的都没有这个问题。

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

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

文本/javascript(注册为过时,未弃用;但仍然有效,支持最好) Text /ecmascript(注册为过时,未弃用;但仍然有效) 应用程序/ javascript 应用程序/ ecmascript

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

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

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

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