在HTML页面的顶部,我有:

<script src="https://raw.github.com/cloudhead/less.js/master/dist/less-1.3.3.js"></script>


当我在浏览器中加载页面(Google Chrome v 27.0.1453.116)并启用开发者工具时,它说:


拒绝执行“ https://raw.github.com/cloudhead/less.js/master/dist/less-1.3.3.js”中的脚本,因为其MIME类型(“文本/纯文本”)不可执行,并且启用了严格的MIME类型检查。


实际上,该脚本将无法运行。 Chrome为什么认为这是纯文本文件?它显然具有.js文件扩展名。

由于我使用的是HTML5,因此省略了type属性,因此我认为这可能是导致问题的原因。因此,我在type="text/javascript"标签中添加了<script>,并得到了相同的结果。我什至尝试过type="application/javascript",但仍然遇到相同的错误。

然后出于好奇,我尝试将其更改为type="text/plain"。浏览器没有返回错误,但是JavaScript当然也没有运行。

最后,我认为文件名中的句点可能会使浏览器退出。因此,在我的HTML代码中,我将所有句点都更改为URL转义字符%2E:唯一真正有效的方法(即浏览器没有给出错误并且JS成功运行)是如果我下载文件,将其上传到本地目录,然后将src值更改为本地文件。我不想这样做,因为我想节省自己网站上的空间。

如何让Chrome识别链接文件实际上是JavaScript类型?

#1 楼

您遇到的问题无法控制,因为这是在您提到的路径上在Github上设置托管的方式,扩展类型不仅是执行文件时要考虑的因素,因为Web托管可以否决如何浏览器呈现文件。

如果设置了主机,则可以将.zip文件呈现为.html文件,您可以通过使用Firebug并查看标题响应来自己检查因此,如果您请求一个JS文件,但是标头响应返回了不同的期望值,那么浏览器将尊重标头响应,而不是请求的内容...

在原始子域上托管的github返回Content-Type text/plain; charset=utf-8作为MIME类型,这意味着它不会以JS形式而是以原始文本形式执行,下面是一个示例,您需要服务器返回以呈现文件,下面是github返回的代码。

支持JS MIME类型的服务器看起来像:

Accept-Ranges   bytes
Connection  Keep-Alive
Content-Encoding    gzip
Content-Length  31097
Content-Type    application/javascript
Vary    Accept-Encoding
Request Headersview source
Accept  text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8


这就是https://raw.github.com/cloudhead/less.js/master/dist/less-1.3.3.js标头响应为(RAW VIEW)。

Accept-Ranges   bytes
Connection  Keep-Alive
Content-Disposition inline
Content-Encoding    gzip
Content-Length  41354
Content-Transfer-Encoding   binary
Content-Type    text/plain; charset=utf-8


评论


嗯什么那么解决方法是什么?

– pabrams
17年12月3日在15:59

@pabrams在您的控件内使用适当的主机是解决方案或使用rawgit

–西蒙·海特(Simon Hayter)♦
18-2-20在13:51



#2 楼

2018年12月edit

RawGit由于恶意使用而现在正在关闭,因此他们建议改为使用以下服务之一:


jsDelivr
GitHub Pages
CodeSandbox
unpkg


原始帖子

Rawgithub.com允许用户使用Git的“原始”版本,将其转换为可在<script>标签中使用的网址。它非常易于使用,只需从原始URL中删除第一个.。例如:

https://raw.github.com/joelambert/CSS-Animation-Store/master/cssanimationstore.js


将变成这个

https://rawgithub.com/joelambert/CSS-Animation-Store/master/cssanimationstore.js


,然后将其放入具有适当类型的<script>标签。这么简单!

它们确实限制了请求的数量,因为它仅用于开发目的,而不是用于生产目的。

2014编辑

作为Reinderien提到过,rawgithub现在只是rawgit,所以新的脚本链接将是

https://rawgit.com/joelambert/CSS-Animation-Store/master/cssanimationstore.js


评论


它说在rawgithub主页上,不要在生产站点上使用它。而且它似乎不是Github的官方网站。

–心怀不满的山羊
13年10月1日在18:50

我从未说过没有...

– Zach Saucier
13年10月1日在18:52

注意-现在将重定向到rawgit.com。而且有效!

– Reinderien
14-10-29在16:15

现在,该网站提供了403个请求消息,标头告诉您它正在关闭。

–迈克尔
18/12/10在19:38

@Michael Sad :(幸运的是,rawgit在其网站上提供了一些替代方法,所以我用提供的替代方法更新了我的答案。

– Zach Saucier
18/12/10在19:59

#3 楼

文件扩展名无关紧要,重要的是Content-Type标头,并且该文件带有text/plain内容类型(这是Github的“原始”视图的目的)。

您应该真正下载该文件的副本本地存储到您的站点,并从那里包含它。即使它确实可以从Github上运行,但由于您不是异步加载JS文件,因此将<script>标记放在页面标题中即可使您的网站依赖于Github的可用性。

评论


“您应该真正在本地将文件的副本下载到您的站点并从那里包含它”,这就是关键。它不打算从GitHub托管。

–章鱼
2013年6月25日16:49



@Octopus我们可以配置为下载和存储该文件的本地副本,然后以编程方式将其指向该脚本。

– Sudip Bhandari
17年5月19日在9:39

#4 楼

这是旨在防止某些XSS攻击的有意功能。改用GitHub Pages。

#5 楼

正如bybe指出的那样,问题是raw.github.com所提供的几乎所有内容都以文本文件的形式发送出去-这样,内容就可以在浏览器中以纯文本形式呈现,而不会遇到任何其他应用程序或问题。否则,您将陷入一种情况,即试图查看.js文件可能会导致浏览器尝试运行该文件,而不是向您显示。正在尝试成为CDN。您实际上应该:


自己托管文件,它并不大。
为此站点上的此静态文件和其他静态文件使用专用的CDN。像cdnjs.com这样的人,可以使用各种版本的lessjs。