链接并执行GitHub上托pipe的外部JavaScript文件

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

由于其MIMEtypes( text/plain )不可执行,因此拒绝执行脚本,并且启用严格的MIMEtypes检查。

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

工作代码:

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

非工作代码:

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

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

步骤

  1. 在GitHub上find你的链接,然后点击文件的“Raw”版本。
  2. 复制url,并链接到它。
  3. rawgit.com更改为rawgit.com (非生产)或cdn.rawgit.com (生产)

例如

 http://raw.githubusercontent.com/user/repo/branch/file.js 

使用此URL进行开发:

 http://rawgit.com/user/repo/branch/file.js 

在制作中使用此url:

 http://cdn.rawgit.com/user/repo/tag/file.js 

另请注意,对于生产环境,请考虑定位特定标签; 而不是分支,以确保您获得您期望的文件的特定版本,而不是随时间变化的HEAD版本。


为什么这需要?

GitHub开始使用X-Content-Type-Options: nosniff ,它指导更多的现代浏览器执行严格的MIMEtypes检查。 然后它返回服务器返回的MIMEtypes的原始文件,防止浏览器按照预期使用文件(如果浏览器支持该设置)。

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

这是不可能的。 GitHub已经明确地禁止了JavaScript的盗链,而新版本的浏览器则尊重这个设置。

点头:支持Chrome和Firefox的nosniff头文件

rawgithub.comredirect到rawgit.com所以上面的例子现在是

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

把事情弄清楚和简短

//raw.githubusercontent.com – > //rawgit.com

请注意,这是由rawgit的开发托pipe处理,而不是他们的生产托pipecdn

上面的答案明确地回答了这个问题,但我想提供另一种select – 解决类似问题的不同观点/方法。

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

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

如果您使用请求,我可以build议两个解决scheme

解决scheme1:使用修改标题规则并删除响应标题

脚步

  1. http://www.requestly.in安装请求;
  2. 转到规则页面
  3. 点击添加图标创build一个规则
  4. select修改标题
  5. 给一个名字和描述
  6. selectRemove – > Response – > X-Content-Type-Options
  7. 在源字段中,inputUrl – > Contains – > raw.githubusercontent.com

解决scheme2:使用replace主机规则

  1. http://www.requestly.in安装请求;
  2. 转到规则页面
  3. 点击添加图标创build一个规则
  4. raw.githubusercontent.comreplace为rawgit.com

检查此屏幕截图了解更多详情 在这里输入图像描述

如何testing

我们创build了一个简单的JS小提琴来testing我们是否可以在我们的代码中使用原始的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源执行脚本时有一些问题。

我还在“ 请求”博客上写了一篇文章 。 请参阅它的更多细节。

希望它有帮助!

免责声明:我是“ 请求 ”的作者所以你可以责怪任何你不喜欢的东西。

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

非常

可靠。
随着text/plain
在这里输入图像描述 没有text/plain
在这里输入图像描述

我的用例是从我的Bitbucket帐户加载“ bookmarklets ”direclty,它与Github具有相同的限制。 围绕我想出的工作是AJAX脚本和运行eval响应string,下面的片段是基于这种方法。

 <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注释是为了允许在浏览器的开发人员工具中对脚本进行debugging。

我发现错误是由于在文件开始的注释,你可以解决这个问题,通过简单地创build你自己的文件没有评论,推到混帐,它显示没有错误

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

没有评论

与评论

https://raw.githack.com/

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

  • 删除nosniff http头
  • 通过ext名称修复mime type

和这个网站:

https://rawgit.com/

当一个file upload到GitHub,你可以使用它作为外部来源或免费托pipe。 特洛伊·阿尔福德(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的链接:

这是最后的链接:

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

同样,如果你主持一个CSS文件,你必须这样做,如上所述。 这是最简单的方法来获得简单的链接调用您的外部CSS或托pipe在Github上的JavaScript文件。

我希望这是有帮助的。

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

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

解决方法:

  • 把脚本放到user.github.io/repo
  • 使用像rawgit.com这样的第三方CDN。

另外,如果生成你的标记服务器端,你可以只读取和注入。 例如,在JSTL中,你可以这样做:

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

他们不允许盗链的原因,如果你想成为一个好公民,可能是不好的forms。 我build议你caching该JavaScript,只有实际重新周期,如你所见。