Vincule e execute o arquivo JavaScript externo hospedado no GitHub


546

Quando tento alterar a referência vinculada de um arquivo JavaScript local para uma versão bruta do GitHub, meu arquivo de teste para de funcionar. O erro é:

Recusou-se a executar o script de ... porque seu tipo MIME ( text/plain) não é executável e a verificação estrita do tipo MIME está ativada.

Existe uma maneira de desativar esse comportamento ou existe um serviço que permite vincular aos arquivos brutos do GitHub?

Código de trabalho:

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

Código que não funciona:

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

3
rawgit.com é o novo domínio agora
Muhammad Umer


1
@ MuhammadUmer - somente se seus arquivos de origem nunca mudarem . rawgito cache nunca é atualizado .
Vsync

3
2019: APENAS Pule TODAS AS RESPOSTAS MENCIONADAS A RAW OU RAWGIT. Rawgit está morto. Vá para a resposta de chharwey e a vote até que ela chegue ao topo. Essa é a boa: a mais simples, que usa a abordagem preferida oficial do GitHub.
Marco Faustinelli

1
Use jsdelivr.com/?docs=gh , ele funciona
AuthorProxy

Respostas:


1018

Não é uma boa solução para este, agora, usando jsdelivr.net .

Passos :

  1. Encontre o seu link no GitHub e clique na versão "Raw".
  2. Copie o URL.
  3. Mude raw.githubusercontent.comparacdn.jsdelivr.net
  4. Insira /gh/antes do seu nome de usuário.
  5. Retire o branchnome
  6. (Opcional) Insira a versão à qual você deseja vincular, pois @version(se você não fizer isso, receberá a versão mais recente - o que pode causar armazenamento em cache a longo prazo)

Exemplos :

http://raw.githubusercontent.com/<username>/<repo>/<branch>/path/to/file.js

Use este URL para obter a versão mais recente:

http://cdn.jsdelivr.net/gh/<username>/<repo>/path/to/file.js

Use este URL para obter uma versão específica ou confirmar o hash:

http://cdn.jsdelivr.net/gh/<username>/<repo>@<version or hash>/path/to/file.js

Para ambientes de produção , considere direcionar uma tag específica ou commit-hash em vez da ramificação. O uso do link mais recente pode resultar em cache de longo prazo do arquivo, fazendo com que seu link não seja atualizado à medida que você pressiona novas versões. Vincular a um arquivo por commit-hash ou tag torna o link exclusivo para a versão.


Por que isso é necessário?

Em 2013, o GitHub começou a usar X-Content-Type-Options: nosniff, o que instrui os navegadores mais modernos a impor a verificação estrita do tipo MIME. Em seguida, ele retorna os arquivos brutos em um tipo MIME retornado pelo servidor, impedindo que o navegador use o arquivo como pretendido (se o navegador atender à configuração).

Para informações sobre este tópico, consulte este tópico de discussão .


14
Também funciona para gists. Eu era capaz de substituir gist.githubusercontent.comcom rawgist.come tenho que trabalhar.
haridsv

3
Não sei quem mantém este site rawgit, mas não o use na produção. Você teria um terceiro desconhecido que pode injetar qualquer javascript no seu site.
Nev5

1
@Maciej Krawczyk - sim - a página o encoraja explicitamente a usar um link específico de consolidação, em vez de um link de ramificação, exatamente por esse motivo.
Troy Alford

4
O rawgit agora está descontinuado (a partir de 08/10/2018): rawgit.com . recomendo atualizar esta resposta.
chharvey

1
Obrigado por apontar isso @chharvey - Eu atualizei a resposta para refletir jsdelivr.net
Troy Alford


25

rawgithub.comredireciona para rawgit.comEntão o exemplo acima agora seria

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


Visite rawgit.com e cole o URL para o arquivo ou essência. Ele irá gerar um URL válido para você.
Marcelo Vani 20/01

8
O rawgit agora está descontinuado (a partir de 08/10/2018): rawgit.com . recomendo atualizar esta resposta.
chharvey

10

Páginas do GitHub é a solução oficial do GitHub para esse problema.

raw.githubusercontentfaz com que todos os arquivos usem o text/plaintipo MIME, mesmo se o arquivo for um arquivo CSS ou JavaScript. Portanto https://raw.githubusercontent.com/‹user›/‹repo›/‹branch›/‹filepath›, não será o tipo MIME correto, mas um arquivo de texto simples e vinculá-lo via <link href="..."/>ou <script src="..."></script>não funcionará - o CSS não será aplicado / o JS não será executado.

O GitHub Pages hospeda seu repositório em um URL especial, então tudo que você precisa fazer é fazer o check-in de seus arquivos e enviar por push. Observe que, na maioria dos casos, as páginas do GitHub exigem que você se comprometa com um ramo especial gh-pages,.

No seu novo site, normalmente https://‹user›.github.io/‹repo›, todos os arquivos confirmados na gh-pagesramificação (a confirmação mais recente) estão presentes nesse URL. Então, você pode vincular ao seu arquivo js via <script src="https://‹user›.github.io/‹repo›/file.js"></script>, e este será o tipo MIME correto.

Você tem arquivos de compilação?

Pessoalmente, minha recomendação é executar esse ramo paralelamente master. Nogh-pages ramificação, você pode editar seu .gitignorearquivo para fazer o check-in de todos os arquivos dist / build necessários para o seu site (por exemplo, se você possui arquivos compactados / minificados), mantendo-os ignorados em sua masterramificação. Isso é útil porque você normalmente não deseja acompanhar as alterações nos arquivos de compilação no seu repositório regular. Toda vez que você quiser atualizar seus arquivos hospedados, simplesmente fundir masterem gh-pages, reconstruir, cometer, e empurre.

(protip: você pode mesclar e reconstruir no mesmo commit com estas etapas :)

$ git checkout gh-pages
$ git merge --no-ff --no-commit master  # prepare the merge but dont 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

8

As respostas acima respondem claramente à pergunta, mas quero fornecer outra alternativa - Uma visão / abordagem diferente para resolver o problema semelhante.

Você também pode usar a extensão do navegador para remover o X-Content-Type-Optionscabeçalho de resposta dos raw.githubusercontent.comarquivos. Existem algumas extensões do navegador para modificar os cabeçalhos de resposta.

  1. Solicitado: Chrome + Firefox
  2. Modificar cabeçalhos: Firefox

Se você usar Requestly, posso sugerir duas soluções

Solução 1: use a regra Modificar cabeçalhos e remova o cabeçalho de resposta

Passos

  1. Instale o Requestly em http://www.requestly.in
  2. Vá para a página Regras
  3. Clique no ícone Adicionar para criar uma regra
  4. Selecione Modificar cabeçalhos
  5. Dê um nome e descrição
  6. Selecione Remove-> Response->X-Content-Type-Options
  7. No campo Origem, insira Url-> Contains->raw.githubusercontent.com

Solução 2: use Substituir regra do host

  1. Instale o Requestly em http://www.requestly.in
  2. Vá para a página Regras
  3. Clique no ícone Adicionar para criar uma regra
  4. Substitua raw.githubusercontent.comporrawgit.com

Verifique esta captura de tela para obter mais detalhesinsira a descrição da imagem aqui

Como testar

Criamos um JS Fiddle simples para testar se podemos usar arquivos brutos do github como scripts em nosso código. Aqui está o Fiddle com o seguinte código

<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>

Se você vê Script evaluated successfully!, significa que você pode usar o arquivo github bruto no seu código. Caso contrário, Problem evaluating scriptindica que há algum problema ao executar o script a partir da fonte bruta do github.

Também escrevi um artigo no blog Requestly sobre isso. Consulte-o para mais detalhes.

Espero que ajude!!

Isenção de responsabilidade: sou autor de Requestly. Portanto, você pode culpar qualquer coisa que não gostar.



5

Para tornar as coisas claras e curtas

//raw.githubusercontent.com -> //rawgit.com

Observe que isso é tratado pela hospedagem de desenvolvimento do rawgit e não pelo CDN para hospedagem de produção


O URL bruto padrão parece ter sido alterado desde essa resposta, portanto a conversão é agora https://raw.githubusercontent.com-> https://rawgit.comCaso contrário, essa resposta é mais clara e funciona.
Mikeym 2/11

4
O rawgit agora está descontinuado (a partir de 08/10/2018): rawgit.com . recomendo atualizar esta resposta.
chharvey

4

Meu caso de uso foi carregar o direclty ' bookmarklets ' da minha conta do Bitbucket, que possui as mesmas restrições do Github. O trabalho ao redor que eu criei foi o AJAX para o script e executado evalna sequência de respostas, abaixo do snippet é baseado nessa abordagem.

<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>

Observe que a adição de sourceURLcomentários deve permitir a depuração do script nas ferramentas de desenvolvedor do navegador.


1

Quando um arquivo é carregado no github, você pode usá-lo como fonte externa ou hospedagem gratuita. Troy Alford explicou isso bem acima. Mas, para facilitar, deixe-me dizer algumas etapas fáceis, você pode usar um arquivo bruto do github em seu site:

Aqui está o link do seu arquivo:

https://raw.githubusercontent.com/mindmup/bootstrap-wysiwyg/master/bootstrap-wysiwyg.js

Agora, para executá-lo, você deve remover https: // e o ponto (.) Entre raw e githubusercontent

Como isso:

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

Agora, quando você visitar este link, receberá um link que pode ser usado para chamar seu javascript:

Aqui está o link final:

https://rawgit.com/mindmup/bootstrap-wysiwyg/master/bootstrap-wysiwyg.js

Da mesma forma, se você hospedar um arquivo css, deverá fazê-lo conforme mencionado acima. É a maneira mais fácil de obter um link simples para chamar seu arquivo css ou javascript externo hospedado no github.

Espero que isto seja útil.

URL de referência: http://101helper.blogspot.com/2015/11/store-blogger-codes-on-github-boost-blogger-speed.html


3
O rawgit agora está descontinuado (a partir de 08/10/2018): rawgit.com . recomendo atualizar esta resposta.
chharvey

1

Descobri que o erro foi mostrado devido aos comentários no início do arquivo. Você pode resolver esse problema, simplesmente criando seu próprio arquivo sem comentar e pressionando o git, ele não mostra erro

Como prova, você pode tentar esses dois arquivos com o mesmo código de paginação fácil:

sem comentários

com comentário


1

Eu tive o mesmo problema que você, o que fiz foi mudar para

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

Funciona para mim.


mudar de quê para quê? por favor mostre o antes e depois
Alexander Mills

0

Maneira mais simples:
<script type="text/plain" src="http://raw.githubusercontent.com/user/repo/branch/file.js"></script>
Servido pelo GitHub
e

muito

confiável.
Com text/plain
insira a descrição da imagem aqui Semtext/plain
insira a descrição da imagem aqui


Esta é a melhor solução, simplesmente funciona e faz muito sentido.
a20

2
não. Tudo isso faz é impedir que o script mesmo correndo
Steven Penny

2
Não vai funcionar mais em breve. No logcat do meu dispositivo Android: "A busca de scripts com atributos de tipo / idioma inválidos foi descontinuada e será removida no M56, por volta de janeiro de 2017. Consulte chromestatus.com/features/5760718284521472 para obter mais detalhes."
precisa saber é o seguinte

0

raw.github.comnão é um acesso verdadeiramente bruto ao recurso de arquivo, mas uma exibição renderizada pelo Rails. Portanto, acessar raw.github.comé muito mais pesado que o necessário. Não sei por que raw.github.comé implementado como uma visualização do Rails. Em vez de corrigir esse problema de rota, o GitHub adicionou um X-Content-Type-Options: nosniffcabeçalho.

Gambiarra:

  • Coloque o script em user.github.io/repo
  • Use uma CDN de terceiros como rawgit.com.

Para qualquer um mais confuso com isso, eles fizeram isso intencionalmente. Você costumava simplesmente usar raw.github.compara carregar arquivos - e o github percebia que eles estavam sendo usados ​​como CDN, o que lhes causava muito tráfego. Como resultado, eles mudaram para esse tipo de renderização com o X-Content-Type-Options: nosniffcabeçalho, especificamente para impedir que as pessoas usem seus serviços dessa maneira.
Troy Alford

0

Como alternativa, se você gerar sua marcação no lado do servidor, basta buscar e injetar. Por exemplo, no JSTL, você pode fazer isso:

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

Eles não permitem hotlinking por um motivo, então provavelmente são de má forma se você quiser ser um bom cidadão. Eu sugiro que você armazene em cache esse javascript e só volte a buscar periodicamente conforme achar melhor.


0

Exemplo


original

https://raw.githubusercontent.com/antelove19/qrcodejs/master/qrcode.min.js

cdn.jsdelivr.net

https://cdn.jsdelivr.net/gh/antelove19/qrcodejs/qrcode.min.js
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.