直接从GitHub热链接资源,例如JavaScript文件

22

我曾经关于从GitHub引用资源的问题提出过一个问题,答案是使用原始链接:

https://raw.github.com/username/repository/branch/file.js

我正在尝试使用以下方式导入脚本:

<script
   type="text/javascript"
   src="https://raw.github.com/username/repo/master/src/file.js"
></script>

但我得到了以下错误:

拒绝执行脚本 'https://raw.github.com/username/repo/master/src/file.js',因为它的MIME类型('text/plain')不可执行,并且启用了严格的MIME类型检查。

是否有任何替代方案来修复这个错误?

使用示例

我没有在生产中使用它,而是用于演示页面:

project-repository-from-github
  ├─ master
  │   ├─ src
  │   │   └─ my-jQuery-plugin.js
  │   └─ README.md
  └─ gh-pages
      ├─ css
      │   └─ style.css
      └─ index.html

在index.html页面中,我想要最新版本的my-jQuery-plugin.js文件。因此,我会包含指向该脚本的原始URL。

如何修复错误?


1
记得我在答案末尾写的那个关于不要在生产环境中使用这个的小注释吗?原因就在于这些东西。你将无法更改 Github 发送的这些“原始”文件的标头... - Lix
1
@Lix 是的,你的预测是正确的.. 不幸的是。 :-) - Ionică Bizău
2个回答

42

是的,Github在2013年4月进行了更改:

我们在2011年添加了X-Content-Type-Options: nosniff头文件到我们的原始URL响应中,作为对抗热链接的第一步。这会强制浏览器根据Content-Type头来处理内容。这意味着当我们为文件的原始视图设置Content-Type: text/plain时,浏览器将拒绝将该文件视为JavaScript或CSS。

但是感谢http://combinatronics.com/,我们可以包含GH脚本。唯一的变化是将raw.github.com替换为combinatronics.com:

<script
   type="text/javascript"
   src="https://combinatronics.com/username/repo/master/src/file.js"
></script>

该项目托管在 Github 上并开源
是的,@Lix 是正确的。这些文件不是从 Github 提供的,而是从 combinatronics 提供的。

我发现的另一个解决方法是,不要使用:

<script
   type="text/javascript"
   src="https://combinatronics.com/username/repo/master/src/file.js"
></script>

你可以使用 $.getScript jQuery 函数:

<script>
  $.getScript("https://combinatronics.com/username/repo/master/src/file.js", function () {
    /* do something when loaded */
  });
</script>

5
需要警告人们,该内容现在不再从GitHub提供。虽然所有者声明他们与GitHub无关,但域名和与实际GitHub网站的“raw”子域名的相似性非常误导且不是立即明显的。 - Lix
5
我相信网站所有者是个好人,但也许有一天他会忘记按时续费域名,然后骗子就会接管这个域名,导致你的网站被恶意软件攻击。请警惕。 - Alex from Jitbit
现在他们已经转移到 https://rawgit.com 进行开发,并且甚至拥有 https://cdn.rawgit.com 上的 CDN。资源名称仍然是相同的 "username/repo/master/src/..."。 - Felipe
@Felipe 谢谢。很好他们从旧域名进行了重定向。 - Ionică Bizău
这里是另一个非常相似的选择,使用jsdelivr.net。 - J0ANMM

7
我发现最好的解决方案是使用GitHub页面:https://pages.github.com/ 限制在于您只能使用一个存储库分支来保留您的脚本(即:gh-pages分支)。
使用示例: 将test.js脚本推送到存储库的gh-pages分支中。 该脚本将位于yourusername.github.io/REPO/test.js上(更新可能需要约10分钟)。
其他解决方案: http://rawgithub.com 也适用于开发和生产环境(使用CDN),如果您不更改脚本(CDN永久缓存特定URL)。

1
RawGit现在处于日落阶段,将很快关闭。这是五年来的有趣时光,但所有事情都必须结束。在过去一个月内通过RawGit提供内容的GitHub存储库将继续提供服务,直至2019年10月至少。其他存储库的URL不再提供服务。如果您目前正在使用RawGit,请尽快停止使用。 - Jonatas Emidio

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