Link and execute external JavaScript file hosted on GitHub
当我尝试将本地javascript文件的链接引用更改为Github原始版本时,我的测试文件将停止工作。错误是:
Refused to execute script from ... because its MIME type (
text/plain ) is not executable, and strict MIME type checking is enabled.
是否有方法禁用此行为,或者是否有允许链接到Github原始文件的服务?
工作代码:
1 | <script src="bootstrap-wysiwyg.js"> |
非工作代码:
1 | <script src="https://raw.github.com/mindmup/bootstrap-wysiwyg/master/bootstrap-wysiwyg.js"> |
现在,使用jsdelivr.net有一个很好的解决方法。
步骤:
实例:
1 | http://raw.githubusercontent.com/<username>/<repo>/<branch>/path/to/file.js |
使用此URL获取最新版本:
1 | http://cdn.jsdelivr.net/gh/<username>/<repo>/path/to/file.js |
使用此URL获取特定版本或提交哈希:
1 | http://cdn.jsdelivr.net/gh/<username>/<repo>@<version or hash>/path/to/file.js |
对于生产环境,考虑以特定的标记或提交哈希为目标,而不是以分支为目标。使用最新的链接可能会导致文件的长期缓存,导致在推送新版本时链接无法更新。通过提交哈希或标记链接到文件使链接对于版本是唯一的。
为什么需要这样做?
2013年,Github开始使用
有关此主题的背景,请参阅此讨论主题。
这已经不可能了。GitHub已显式禁用了javascript热链接和较新版本的浏览器都尊重这种设置。
注意:Chrome和Firefox支持nosniff头文件
上面的答案清楚地回答了这个问题,但我想提供另一种选择——一种不同的观点/方法来解决类似的问题。
您还可以使用浏览器扩展来删除
如果您需要使用,我可以建议两种解决方案
解决方案1:使用修改头规则并删除响应头步骤解决方案2:使用替换主机规则
查看此屏幕截图了解更多详细信息
如何测试我们创建了一个简单的JS小提琴来测试是否可以在代码中使用原始的Github文件作为脚本。这是小提琴使用以下代码
1 2 3 4 5 6 7 8 9 10 11 | <center id="msg"></center> <script src="https://raw.githubusercontent.com/sachinjain024/practicebook/master/web-extensions-master/storage/background.js"> try { if (typeof BG.Methods !== 'undefoned') { document.getElementById('msg').innerHTML = 'Script evaluated successfully!'; } } catch (e) { document.getElementById('msg').innerHTML = 'Problem evaluating script'; } |
如果您看到
我还写了一篇关于这个的请求博客文章。详情请参阅。
希望它有帮助!!
免责声明:我是《请求》的作者,所以你可以为任何你不喜欢的事情负责。
把事情弄清楚和简短
请注意,这是由rawgit的开发宿主处理的,而不是由其生产宿主的cdn处理的。
GitHub页面是GitHub对此问题的官方解决方案。
Github页面在一个特殊的URL上托管您的repo,所以您所要做的就是签入您的文件并推送。注意,在大多数情况下,Github页面要求您提交到一个特殊的分支,
在您的新站点(通常是
就我个人而言,我的建议是与
(Protip:您可以通过以下步骤在同一提交中合并和重新生成:)
1 2 3 4 5 6 | $ git checkout gh-pages $ git merge --no-ff --no-commit master # prepare the merge but don’t commit it (as if there were a merge conflict) $ npm run build # (or whatever your build process is) $ git add . # stage the newly built files $ git merge --continue # commit the merge $ git push origin gh-pages |
https://raw.githack.com网站/
发现此网站为提供一个cdn
- 删除
nosniff HTTP头 - 用ext名称固定
mime type 。
这个网站:
网址:https://rawgit.com/
NOTE: RawGit has reached the end of its useful life
我的用例是从我的BitBucket帐户加载"bookmarklets"direclty,该帐户与GitHub具有相同的限制。我想到的解决方法是为脚本使用Ajax,并在响应字符串上运行
1 2 3 4 5 6 7 | var sScriptURL ='<script-URL-here>'; var oReq = new XMLHttpRequest(); oReq.addEventListener("load", function fLoad() {eval(this.responseText + ' //# sourceURL=' + sScriptURL)}); oReq.open("GET", sScriptURL); oReq.send(); false; |
注意,附加
我和你有同样的问题,我所做的就是
1 | <script type="application/javascript" src="bootstrap-wysiwyg.js"> |
它对我有用。
我发现这个错误是由于文件开头的注释而显示的,你可以解决这个问题,只需创建自己的文件而不加注释并推到git,它就不会显示任何错误。
为了证明这两个文件可以使用相同的代码轻松分页:
不加评论
带评论
当文件上载到GitHub时,可以将其用作外部源或免费宿主。TroyAlford已经在上面很好地解释了这一点。但是为了更简单,让我告诉您一些简单的步骤,然后您可以在您的站点中使用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的链接:
下面是最后一个链接:
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
或者,如果在服务器端生成标记,则只需获取和注入即可。例如,在JSTL中,可以这样做:
1 2 | <script type="text/javascript"> <c:import url="https://raw.github.com/mindmup/bootstrap-wysiwyg/master/bootstrap-wysiwyg.js" /> |
他们不允许热链接是有原因的,所以如果你想成为一个好公民,很可能是不好的形式。我建议您缓存该javascript,并且只在您认为合适的时候定期重新获取。
解决办法:
- 把脚本放到
user.github.io/repo 上 - 使用第三方cdn,如rawgit.com。
最简单的方法: