570

当我尝试将本地 JavaScript 文件的链接引用更改为 GitHub 原始版本时,我的测试文件停止工作。错误是:

拒绝从 ... 执行脚本,因为它的 MIME 类型 ( text/plain) 不可执行,并且启用了严格的 MIME 类型检查。

有没有办法禁用这种行为,或者是否有允许链接到 GitHub 原始文件的服务?

工作代码:

<script src="bootstrap-wysiwyg.js"></script>

非工作代码:

<script src="https://raw.github.com/mindmup/bootstrap-wysiwyg/master/bootstrap-wysiwyg.js"></script>
4

15 回答 15

1056

现在,使用jsdelivr.net有一个很好的解决方法。

步骤

  1. 在 GitHub 上找到您的链接,然后单击“原始”版本。
  2. 复制网址。
  3. 更改raw.githubusercontent.comcdn.jsdelivr.net
  4. 在您的用户名之前插入/gh/
  5. 删除branch名称。
  6. (可选)插入您要链接的版本@version,如(如果您不这样做,您将获得最新的- 这可能会导致长期缓存)

例子

http://raw.githubusercontent.com/<username>/<repo>/<branch>/path/to/file.js

使用此 URL 获取最新版本:

http://cdn.jsdelivr.net/gh/<username>/<repo>/path/to/file.js

使用此 URL 获取特定版本或提交哈希:

http://cdn.jsdelivr.net/gh/<username>/<repo>@<version or hash>/path/to/file.js

对于生产环境,请考虑针对特定标签或提交哈希而不是分支。使用最新链接可能会导致文件长期缓存,导致您的链接在推送新版本时不会更新。通过提交哈希或标签链接到文件使链接对版本唯一。


为什么需要这个?

2013 年,GitHub 开始使用X-Content-Type-Options: nosniff,它指示更现代的浏览器强制执行严格的 MIME 类型检查。然后它以服务器返回的 MIME 类型返回原始文件,从而阻止浏览器按预期使用文件(如果浏览器接受该设置)。

有关此主题的背景信息,请参阅此讨论主题

于 2013-08-05T02:34:27.170 回答
61

这已经不可能了。GitHub 已明确禁用 JavaScript 热链接,较新版本的浏览器尊重该设置。

注意:Chrome 和 Firefox 支持 nosniff 标头

于 2013-06-28T20:47:20.333 回答
26

rawgithub.com重定向到rawgit.com所以上面的例子现在是

http://rawgit.com/user/package/master/link.min.js

于 2014-05-21T14:18:08.033 回答
15
于 2018-10-22T03:16:51.940 回答
8

https://raw.githack.com/

发现这个站点提供了一个 CDN

  • 删除nosniffhttp头
  • mime type通过分机名称修复

这个网站:

https://rawgit.com/

注意:RawGit 已达到其使用寿命

于 2017-03-06T10:35:03.377 回答
8

以上答案清楚地回答了这个问题,但我想提供另一种选择 - 解决类似问题的不同观点/方法。

您还可以使用浏览器扩展来删除文件X-Content-Type-Options的响应标头raw.githubusercontent.com。有几个浏览器扩展可以修改响应头。

  1. 请求:Chrome + Firefox
  2. 修改标头:Firefox

如果您使用 Requestly,我可以建议两种解决方案

解决方案 1:使用修改标头规则并删除响应标头

脚步

  1. 从http://www.requestly.in安装 Requestly
  2. 进入规则页面
  3. 单击添加图标以创建规则
  4. 选择修改标题
  5. 给出名称和描述
  6. 选择Remove-> Response->X-Content-Type-Options
  7. 在源字段中,输入Url-> Contains->raw.githubusercontent.com

解决方案 2:使用替换主机规则

  1. 从http://www.requestly.in安装 Requestly
  2. 进入规则页面
  3. 单击添加图标以创建规则
  4. 替换raw.githubusercontent.comrawgit.com

查看此屏幕截图以获取更多详细信息在此处输入图像描述

如何测试

我们创建了一个简单的 JS Fiddle 来测试我们是否可以在代码中使用原始 github 文件作为脚本。这是 带有以下代码的小提琴

<center id="msg"></center>

<script src="https://raw.githubusercontent.com/sachinjain024/practicebook/master/web-extensions-master/storage/background.js"></script>
<script>
try {
  if (typeof BG.Methods !== 'undefoned') {
    document.getElementById('msg').innerHTML = 'Script evaluated successfully!';
  }
} catch (e) {
  document.getElementById('msg').innerHTML = 'Problem evaluating script';
}
</script>

如果您看到Script evaluated successfully!,则表示您可以在代码中使用原始 github 文件,否则Problem evaluating script表示从原始 github 源执行脚本时出现问题。

我还在Requestly 博客上写了一篇关于此的文章。请参阅它以获取更多详细信息。

希望能帮助到你!!

免责声明:我是Requestly的作者,所以你可以责怪任何你不喜欢的事情。

于 2017-04-06T16:22:50.640 回答
5

让事情变得清晰和简短

//raw.githubusercontent.com-->//rawgit.com

请注意,这是由 rawgit 的开发托管而不是其用于生产托管的 CDN 处理的

于 2015-10-04T17:53:04.120 回答
5

我的用例是从我的 Bitbucket 帐户直接加载“书签”,该帐户与 Github 具有相同的限制。我想出的解决方法是为脚本使用 AJAX 并eval在响应字符串上运行,下面的代码片段基于该方法。

<script>
    var sScriptURL ='<script-URL-here>'; 
    var oReq = new XMLHttpRequest(); 
    oReq.addEventListener("load", 
       function fLoad() {eval(this.responseText + '\r\n//# sourceURL=' + sScriptURL)}); 
    oReq.open("GET", sScriptURL); oReq.send(); false;
</script>

请注意,附加sourceURL注释是为了允许在浏览器的开发人员工具中调试脚本。

于 2016-05-07T02:10:54.397 回答
1

我发现错误是由于文件开头的注释而显示的,您可以解决这个问题,只需创建自己的不带注释的文件并推送到 git,它不会显示错误

为了证明,您可以使用相同的简单分页代码尝试这两个文件:

不加评论

带评论

于 2017-01-29T06:49:22.837 回答
1

我和你有同样的问题,我所做的是改变为

<script type="application/javascript" src="bootstrap-wysiwyg.js"></script>

这个对我有用。

于 2018-06-10T02:23:58.457 回答
1

将文件上传到 github 后,您可以将其用作外部源或免费托管。特洛伊·奥尔福德(Troy Alford)在上面已经很好地解释了。但为了更容易,让我告诉你一些简单的步骤,然后你可以在你的站点中使用 github 原始文件:

这是您文件的链接:

https://raw.githubusercontent.com/mindmup/bootstrap-wysiwyg/master/bootstrap-wysiwyg.js

现在要执行它,您必须删除https://和rawgithubusercontent之间的点( . )

像这样:

rawgithubusercontent.com/mindmup/bootstrap-wysiwyg/master/bootstrap-wysiwyg.js

现在,当您访问此链接时,您将获得一个可用于调用您的 javascript 的链接:

这是最后的链接:

https://rawgit.com/mindmup/bootstrap-wysiwyg/master/bootstrap-wysiwyg.js

同样,如果您托管一个 css 文件,则必须按照上述方法进行操作。这是获取简单链接以调用托管在 github 上的外部 css 或 javascript 文件的最简单方法。

我希望这是有帮助的。

参考网址:http: //101helper.blogspot.com/2015/11/store-blogger-codes-on-github-boost-blogger-speed.html

于 2016-01-04T08:57:12.560 回答
0

例子


原来的

https://raw.githubusercontent.com/antelove19/qrcodejs/master/qrcode.min.js

cdn.jsdelivr.net

https://cdn.jsdelivr.net/gh/antelove19/qrcodejs/qrcode.min.js
于 2020-02-07T06:24:26.920 回答
0

最简单的方式:
<script type="text/plain" src="http://raw.githubusercontent.com/user/repo/branch/file.js"></script>
由 GitHub 提供服务,
以及

非常

可靠的。
text/plain
在此处输入图像描述text/plain
在此处输入图像描述

于 2016-05-31T02:12:43.363 回答
0

或者,如果在服务器端生成标记,您可以获取并注入。例如,在 JSTL 中,您可以这样做:

<script type="text/javascript">
    <c:import url="https://raw.github.com/mindmup/bootstrap-wysiwyg/master/bootstrap-wysiwyg.js" />
</script>

他们不允许盗链是有原因的,所以如果你想成为一个好公民,这可能是一种不好的形式。我建议您缓存该 javascript,并且仅在您认为合适的情况下定期重新获取。

于 2017-05-16T13:58:26.023 回答
0

raw.github.com不是对文件资产的真正原始访问,而是由 Rails 呈现的视图。所以访问raw.github.com比需要的要重得多。我不知道为什么raw.github.com实现为 Rails 视图。GitHub 没有修复此路由问题,而是添加了一个X-Content-Type-Options: nosniff标头。

解决方法:

  • 把脚本放到user.github.io/repo
  • 使用第三方 CDN,例如 rawgit.com。
于 2016-08-27T13:34:54.123 回答