链接并执行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 。
步骤 :
- 在GitHub上find你的链接,然后点击文件的“Raw”版本。
- 复制url,并链接到它。
- 将
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.com
redirect到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
响应标题。 有几个浏览器扩展来修改响应头。
- 请求:Chrome + Firefox
- 修改标题:Firefox
如果您使用请求,我可以build议两个解决scheme
解决scheme1:使用修改标题规则并删除响应标题
脚步
- 从http://www.requestly.in安装请求;
- 转到规则页面
- 点击添加图标创build一个规则
- select修改标题
- 给一个名字和描述
- select
Remove
– >Response
– >X-Content-Type-Options
- 在源字段中,input
Url
– >Contains
– >raw.githubusercontent.com
解决scheme2:使用replace主机规则
- 从http://www.requestly.in安装请求;
- 转到规则页面
- 点击添加图标创build一个规则
- 将
raw.githubusercontent.com
replace为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,您可以使用简单分页的相同代码来尝试这两个文件:
没有评论
与评论
发现这个网站提供了一个CDN
- 删除
nosniff
http头 - 通过ext名称修复
mime type
和这个网站:
当一个file upload到GitHub,你可以使用它作为外部来源或免费托pipe。 特洛伊·阿尔福德(Troy Alford)已经解释清楚了 但为了让它更容易让我告诉你一些简单的步骤,那么你可以在你的网站使用Github的原始文件:
这是你的文件的链接:
https://raw.githubusercontent.com/mindmup/bootstrap-wysiwyg/master/bootstrap-wysiwyg.js
现在执行它,你必须删除https://和raw和githubusercontent之间的点(。)
喜欢这个:
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,只有实际重新周期,如你所见。