<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
#2 楼
2018年12月editRawGit由于恶意使用而现在正在关闭,因此他们建议改为使用以下服务之一:
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。
评论
嗯什么那么解决方法是什么?
– pabrams
17年12月3日在15:59
@pabrams在您的控件内使用适当的主机是解决方案或使用rawgit
–西蒙·海特(Simon Hayter)♦
18-2-20在13:51