【问题标题】:Hotlink resources like JavaScript files directly from GitHub [duplicate]直接来自 GitHub 的 JavaScript 文件等热链接资源 [重复]
【发布时间】:2013-12-17 03:44:50
【问题描述】:

我问了question about including resources from 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。

如何修复错误?

【问题讨论】:

  • 还记得我在回答末尾写的关于不在生产中使用它的小评论吗?这是因为这些类型的东西。您将无法更改 Github 使用这些“原始”文件发送的标头...
  • @Lix 是的.. 你的预测是正确的.. 不幸的是。 :-)

标签: javascript github


【解决方案1】:

是的,Github changed this in April, 2013:

早在 2011 年,我们就在原始 URL 响应中添加了 X-Content-Type-Options: nosniff 标头,作为打击盗链的第一步。这具有强制浏览器根据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>

项目是hosted on Github being open-source

是的,@Lix 是正确的。这些文件不是来自 Github,而是来自 combinatronics。


我发现的另一个解决方法是:

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

你可以使用$.getScriptjQuery函数:

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

【讨论】:

  • 需要警告人们该内容现在没有从 GitHub 提供。尽管所有者声明他们不隶属于 GitHub,但 实际 GitHub 站点的域名和与 raw 子域的相似性相当具有误导性,并且并不立即显而易见。
  • 我相信所有者是个好人,但也许有一天他忘记按时更新他的域名,并且一些骗子拦截了该名称并 BAM 您现在在您的网站上有一个恶意软件脚本.被警告。
  • 现在他们转移到rawgit.com 进行开发,甚至在cdn.rawgit.com 上有一个CDN。资源名称还是一样的“username/repo/master/src/...”
  • @Felipe 谢谢。很高兴他们从旧域进行重定向。
  • Here 使用 jsdelivr.net 的另一个非常相似的替代方案。
【解决方案2】:

我发现对我来说最好的解决方案是使用 GitHub 页面:https://pages.github.com/

限制是你只能使用 repo 中的一个分支来保存你的脚本(即:gh-pages 分支)

示例用法
将 test.js 脚本推送到 REPO 的 gh-pages 分支。

脚本位于 yourusername.github.io/REPO/test.js(更新可能需要大约 10 分钟)

其他解决方案
http://rawgithub.com 如果您不更改脚本(CDN 会永久缓存特定的 url),那么无论是开发还是生产(使用 CDN)都很好。

【讨论】:

  • RawGit 现在处于日落阶段,很快就会关闭。这是一个有趣的五年,但一切都必须结束。上个月通过 RawGit 提供内容的 GitHub 存储库将继续提供服务,直到至少 2019 年 10 月。不再提供其他存储库的 URL。如果您目前正在使用 RawGit,请尽快停止使用。来自rawgit website
猜你喜欢
  • 2018-08-04
  • 2010-11-10
  • 1970-01-01
  • 1970-01-01
  • 2012-02-05
  • 2020-11-04
  • 1970-01-01
  • 2015-11-14
相关资源
最近更新 更多