包括来自raw.github.com的js

时间:2011-08-24 18:00:03

标签: javascript git internet-explorer github

我有一个github.com演示页面,链接到 https://raw.github.com/.../master/.../file.js ,这样我就不会每次更改时,都需要始终将.js文件复制到gh-pages分支。这适用于IE以外的每个浏览器,它抱怨:

  

SEC7112:https://raw.github.com/cwolves/jQuery-iMask/master/dist/jquery-imask-min.js的脚本由于mime类型不匹配而被阻止

此投诉来自以下事实:文件是通过以下方式转移的:

X-Content-Type-Options: nosniff
Content-Type: text/plain

我无法改变。

任何人都有任何想法如何完成同样的事情?以某种方式允许我链接到master分支中的文件,而不必总是将其推送到gh-pages分支?

实际页面:http://cwolves.github.com/jQuery-iMask/

(次要更新 - 我更改了这个确切实例中的gh页面以包含.js文件,因此IE不再被破坏,但仍然会喜欢任何反馈:))

6 个答案:

答案 0 :(得分:62)

您可以尝试使用https://rawgit.com/服务。 只需将raw.github.com替换为rawgit.com

即可

更新

Rawgit服务(前Rawgithub)已经关闭。

  

RawGit已达到其使用寿命的终点   2018年10月8日

     

在过去一个月内通过RawGit提供内容的GitHub存储库将继续提供至2019年的至少10月。其他存储库的URL不再提供。

     

如果您目前正在使用RawGit,请尽快停止使用。

答案 1 :(得分:14)

我无法帮助你欺骗IE,我认为从这个角度来看你所寻找的是不可能的(并且气馁,因为这不是Github的原始URL的目的)。

但是,您可以自动将更改提交到gh-pages,并推动您的生活更轻松。您可以使用post-commit hook自动更新gh-pages分支中的相关文件。我已经制作了这样一个post-commit脚本,它监视某些文件的更改并将它们提交给另一个分支:

#!/bin/sh

WATCH_BRANCH="master"
WATCH_FILES="jquery-imask-min.js"
DEST_BRANCH="gh-pages"

# bail out if this commit wasn't made in the watched branch
THIS_BRANCH=$(git branch --no-color | sed -e '/^[^*]/d' -e 's/* \(.*\)/\1/');
if [ "$THIS_BRANCH" != "$WATCH_BRANCH" ]; then
  exit 0
fi

# only update if watched files have changed in the latest commit
CHANGED_FILES=$(git show --pretty="format:" --name-only $WATCH_BRANCH)
if $(echo "$CHANGED_FILES" | grep "^$WATCH_FILES$" -q); then
  # checkout destination branch, then
  # checkout latest version of each watched file and add to index
  git checkout -q $DEST_BRANCH
  git pull -q
  SAVEIFS=$IFS
  IFS=$(echo -n "|")
  for file in $WATCH_FILES; do
    git checkout $WATCH_BRANCH -- $file
    git add $file > /dev/null
  done
  IFS=$SAVEIFS
  # commit with a chance to edit the message, then go back to watched branch
  LATEST_COMMIT=$(git rev-parse $WATCH_BRANCH)
  git commit -m "Also including changes from $WATCH_BRANCH's $LATEST_COMMIT"
  git push origin $DEST_BRANCH
  git checkout -q $WATCH_BRANCH
fi

请注意,这是一个通用脚本,但我已经为您的目的在顶部指定了配置变量。 $WATCH_FILES可以设置为由大括号|分隔的文件列表,例如index.html|js/jquery.js。必须相对于仓库的根目录指定路径。

如果您有任何问题,请告诉我,如果脚本可以帮助您!

答案 2 :(得分:7)

看看raw.githack.com。这项服务的想法灵感来自于rawgit.com。我刚刚意识到使用整个框架(node.js + express.js)来处理请求代理这样简单的事情是过度的,并且仅使用nginx制作相同的东西。

替换" githubusercontent"使用" githack"在您的github / gist URL中的域名块而且你已经完成了!

此外,它支持bitbucket.com - 只需用bb.githack.com替换整个bitbucket域。

答案 3 :(得分:6)

Github的原始网址并非设计为通用网络托管服务商。把这些东西推到适当的主机上,比如说pages.github.com。

答案 4 :(得分:2)

如今jsDelivr是免费开放的开源软件。 并支持GitHub! https://www.jsdelivr.com/

此外,它来自受信任的人员/公司。

之所以这样说,是因为我不确定我们是否可以信任https://raw.githack.com/

答案 5 :(得分:0)

我也在努力实现这一目标。但是,我似乎无法从@shelhamer获得解决方案在我的代码库中工作。下面是我用来使其工作的更新的post-commit钩子脚本:

#!/bin/sh

WATCH_BRANCH="master"
WATCH_FILES="jquery-imask-min.js"
DEST_BRANCH="gh-pages"

# bail out if this commit wasn't made in the watched branch
THIS_BRANCH=$(git branch --no-color | sed -e '/^[^*]/d' -e 's/* \(.*\)/\1/');
if [ "$THIS_BRANCH" != "$WATCH_BRANCH" ]; then
  exit 0
fi

# only update if watched files have changed in the latest commit
CHANGED_FILES=$(git show --pretty="format:" --name-only $WATCH_BRANCH)
if $(echo "$CHANGED_FILES" | grep "^$WATCH_FILES$" -q); then
  # checkout destination branch, then
  # checkout latest version of each watched file and add to index
  git checkout -q $DEST_BRANCH
  git pull -q
  SAVEIFS=$IFS
  IFS=$(echo -n "|")
  for file in $WATCH_FILES; do
    git checkout $WATCH_BRANCH -- $file
    git add $file > /dev/null
  done
  IFS=$SAVEIFS
  # commit with a chance to edit the message, then go back to watched branch
  LATEST_COMMIT=$(git rev-parse $WATCH_BRANCH)
  git commit -m "Also including changes from $WATCH_BRANCH's $LATEST_COMMIT"
  git push origin $DEST_BRANCH
  git checkout -q $WATCH_BRANCH
fi

我不得不更新grep的使用以使正则表达式成功匹配(-P不是包含在Windows的Git Bash shell中的grep实现的选项),添加git pull和{{1} }。哦,我必须提前添加目录和文件的空壳(也许只是目录已经足够了?)。

由于这实际上是推动,我认为将此脚本切换为后接收脚本而不是后提交可能更好。否则,您可能会将代码推送到从未将其变为主页的gh页面[如果您选择不推送它]。