资源被解释为脚本,但以纯文本的 MIME 类型传输 - 用于本地文件

97

当我包含一个本地脚本文件时,在 Google Chrome 中出现“资源被解释为文本/纯文本 MIME 类型的脚本”的警告。

我知道这个问题通常出现在从服务器加载文件或通过 ajax 加载文件时,往往取决于错误的头文件设置。

奇怪的是,即使它是从本地文件夹中运行的,我仍然会收到此警告:file:///C:/test/foo.html

这只会发生在 Chrome 中,而且使用的是最基本的 HTML。

<!DOCTYPE html>
    <html>
    <head>
        <script type="text/javascript" src="bar.js"></script>
    </head>
    <body>
    </body>
</html>

bar.js 也是尽可能简单的:

function hello() {}

我尝试添加了一个元标记:

<meta http-equiv="content-script-type" content="text/javascript">

在尝试了其他文档类型后仍然无济于事。

显然这不是个真正的问题,因为脚本仍然正常工作,但我正在处理一个大型项目,目前已包含约150个脚本。这使得在它们之间发生实际警告时很难看清。

当我在服务器、本地或远程运行文件时,一切都正常。

你有任何关于为什么 Chrome 会让我感到恼火的想法吗?


你不会碰巧安装了最新的Visual Studio,是吗?这种情况也发生在我身上,而且那是唯一的变化... - Simon Sarris
是的,几周前我使用了VS Express 2012 RC。我也考虑过这个问题,所以我改用notepad++创建文件,但问题仍然存在。如果是VS引起的,那么他们一定改变了某些全局设置/参数。问题是什么,我该如何将其改回? - batzkoo
我仍在努力弄清楚同样的事情。它似乎是一个全局性的问题,而且恰好发生在我安装VS2012之后。如果我有任何发现,我会告诉你的。需要明确的是,我实际上并不使用Visual Studio进行文件编辑,这使得它更加奇怪。 - Simon Sarris
3个回答

199

我弄清楚了!

Visual Studio安装程序必须向注册表中添加了一个错误的行。

打开regedit,并查看该注册表键:

enter image description here

看那个键?Content Type键?将其值从text/plain更改为text/javascript。

最终,Chrome可以再次正常工作。

我应该指出,在Windows 7上默认情况下既没有Content Type也没有PercievedType,因此您可能可以安全地将它们都删除,但最少需要进行此编辑。

总之,希望这对您也有所帮助!


10
干得好!你找到了解决这个烦恼的方法。我没有删除密钥,而是将数据值更改为"text/javascript"。谢谢! - batzkoo
哈哈,我把它改成了text/script,但是它不起作用,也许我应该尝试一下text/javascript! - Simon Sarris
谢谢解决方案!我也遇到了同样的问题...实际上,对于MIME类型为plain/text的我来说,JavaScript代码会抛出错误。我有一些包含UTF-8编码中东欧语言中的字母(如“ő”)的字符串(在数组中)。 “Gergő”是一个不错的匈牙利常见名字。由于我无法运行我的代码,所以感谢上帝,错误也已经消失了 - 但我没有进一步调查这个问题。 - Zoltan
2
哇,你是如何发现这个解决方案的? - Pakman
5
@Pakman 我有一天遇到了这个问题,然后我买了一台新电脑,问题就消失了。后来我安装了 Visual Studio 2012,发现问题又出现了,因此我认为那是罪魁祸首。我猜想它更改了注册表中的文件关联,因为我的所有 .js 文件都显示成了 .txt 的图标,所以我去确认它们是否与正确的数据类型相关联。但事实上,并没有! - Simon Sarris
1
注册表位置为 HKEY_CLASSES_ROOT.js\(我不得不自己搜索!)编辑:-因为我变得眼花,没有看到图像本身中的箭头 :) - user198552

30

我尝试使用这种方法来解决问题,但是它不适用于我。

我的问题是IIS管理器在HTTP功能中没有MIME类型。

我通过启用“静态上下文”来打开它...

--> 控制面板

--> 程序

--> 打开或关闭Windows功能

--> Internet信息服务

--> 万维网服务

--> 常用HTTP功能

--> [X] 静态内容。

此后,MIME类型出现了,一切都重新开始运作了。


0

接受的答案很好!但是,为了回答那些像我一样遇到问题的人,有时候我会使用部门/学院的计算机,在那里我没有权限更改regedit中的任何键值。

更改

<script type="text/javascript" src="main.js"></script>

<script src="main.js"></script>

虽然错误消息仍然存在,但页面已正确加载。


2
但是 OP 的问题是页面加载正确,但仍然收到错误消息。这似乎没有改变任何事情。 - Teepeemm

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接