Chrome a refusé d'exécuter ce fichier JavaScript


32

En tête de ma page HTML, j'ai:

<script src="https://raw.github.com/cloudhead/less.js/master/dist/less-1.3.3.js"></script>

Lorsque je charge la page dans mon navigateur (Google Chrome v 27.0.1453.116) et que j'active les outils de développement, cela dit:

Refusé d'exécuter le script à partir de ' https://raw.github.com/cloudhead/less.js/master/dist/less-1.3.3.js ' car son type MIME ('text / plain') n'est pas exécutable, et la vérification stricte du type MIME est activée.

En effet, le script ne s'exécutera pas. Pourquoi Chrome pense-t-il qu'il s'agit d'un fichier texte brut? Il a clairement une .jsextension de fichier.

Étant donné que j'utilise HTML5, j'ai omis l' typeattribut, j'ai donc pensé que cela pouvait causer le problème. J'ai donc ajouté type="text/javascript"à la <script>balise et obtenu le même résultat. J'ai même essayé type="application/javascript"et j'ai toujours la même erreur.

Ensuite, j'ai essayé de le changer type="text/plain"simplement par curiosité. Le navigateur n'a pas renvoyé d'erreur, mais bien sûr, le JavaScript ne s'est pas exécuté non plus.

Enfin, je pensais que les périodes dans le nom de fichier pouvaient mettre le navigateur hors tension. Donc, dans mon code HTML, j'ai changé toutes les périodes en caractère d'échappement URL %2E:

<script src="https://raw.github.com/cloudhead/less%2Ejs/master/dist/less-1%2E3%2E3.js"></script>

Cela n'a toujours pas fonctionné. La seule chose qui fonctionne vraiment (c'est-à-dire que le navigateur ne donne pas d'erreur et que JS s'exécute avec succès) est si je télécharge le fichier, le télécharge dans un répertoire local, puis modifie la srcvaleur dans le fichier local. Je préfère ne pas le faire car j'essaie d'économiser de l'espace sur mon propre site Web.

Comment puis-je faire en sorte que Chrome reconnaisse que le fichier lié est en fait un type JavaScript?

Réponses:


16

Le problème que vous avez est hors de votre contrôle car c'est ainsi que l'hébergement est configuré sur Github sur le chemin que vous avez mentionné, le type d'extension n'est pas seulement le facteur lorsqu'il s'agit d'exécuter des fichiers car l'hébergement Web peut outrepasser la façon dont un le navigateur rend un fichier.

Vous pouvez avoir un rendu de fichier .zip en tant que fichier .html si l'hôte a été configuré pour le faire, vous pouvez le vérifier vous-même en utilisant Firebug et en consultant la réponse d'en-tête par rapport à ce qui est demandé .... donc si vous demandez un fichier JS mais la réponse d'en-tête renvoie une valeur attendue différente, alors les navigateurs respecteront la réponse d'en-tête et non ce qui est demandé ...

L'hébergement github sur le sous-domaine brut revient en Content-Type text/plain; charset=utf-8tant que type MIME, ce qui signifie qu'il ne s'exercera pas en tant que JS mais plutôt en tant que texte brut, voici un exemple de ce que vous auriez besoin du serveur pour retourner afin de rendre le fichier, et plus bas est le code retourné par github.

Un serveur qui prend en charge le type JS MIME ressemblera à quelque chose comme:

Accept-Ranges   bytes
Connection  Keep-Alive
Content-Encoding    gzip
Content-Length  31097
Content-Type    application/javascript
Vary    Accept-Encoding
Request Headersview source
Accept  text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

Et c'est ce que l'en- https://raw.github.com/cloudhead/less.js/master/dist/less-1.3.3.jstête répond en tant que (RAW VIEW).

Accept-Ranges   bytes
Connection  Keep-Alive
Content-Disposition inline
Content-Encoding    gzip
Content-Length  41354
Content-Transfer-Encoding   binary
Content-Type    text/plain; charset=utf-8

Euh, quoi? Alors, quelle est la solution?
pabrams du

2
@pabrams utilisant un hôte approprié sous votre contrôle est la solution ou utilisez rawgit
Simon Hayter

25

Décembre 2018 modifier

RawGit est désormais en train de disparaître en raison d'une utilisation malveillante, ils recommandent donc d'utiliser l'un des services suivants à la place:


Message d'origine

Rawgithub.com permet aux utilisateurs de prendre les versions "Raw" d'un Git et de le transformer en une URL utilisable dans les <script>balises. Il est assez facile à utiliser, il suffit de supprimer le premier .de l'URL brute. Par exemple, ceci:

https://raw.github.com/joelambert/CSS-Animation-Store/master/cssanimationstore.js

se transformerait en ce

https://rawgithub.com/joelambert/CSS-Animation-Store/master/cssanimationstore.js

puis vous le mettez dans une <script>balise avec le type approprié. C'est simple!

Ils limitent le nombre de demandes car il est destiné à des fins de développement uniquement, pas de production.

2014 modifier

Comme Reinderien l'a mentionné, rawgithub est maintenant juste rawgit, donc le nouveau lien de script serait

https://rawgit.com/joelambert/CSS-Animation-Store/master/cssanimationstore.js

6
Il est dit directement sur la page d'accueil de rawgithub, ne l'utilisez pas pour les sites de production . De plus, il ne semble pas être un site Github officiel.
DisgruntledGoat

1
Je n'ai jamais dit que ce n'était pas le cas ...
Zach Saucier

1
Remarque - cela redirige maintenant vers rawgit.com. Et il fonctionne!
Reinderien

1
Ce site donne maintenant 403s pour les demandes et les en-têtes vous disent que c'est la fin du temps.
Michael

@Michael Sad :( Heureusement, rawgit a fourni des alternatives sur son site Web, j'ai donc mis à jour ma réponse avec celles fournies.
Zach Saucier

6

L'extension de fichier n'est pas pertinente, c'est l'en-tête Content-Type qui compte, et ce fichier est servi avec un text/plaintype de contenu (ce qui est le but de la vue "brute" de Github).

Vous devez vraiment télécharger une copie du fichier localement sur votre site et l'inclure à partir de là. Même si cela fonctionnait depuis Github, puisque vous ne chargez pas le fichier JS de manière asynchrone, le fait de placer cette <script>balise dans l'en-tête de votre page dépend de la disponibilité de Github.


8
"Vous devez vraiment télécharger une copie du fichier localement sur votre site et l'inclure à partir de là", c'est la clé. Ce n'est pas censé être hébergé depuis GitHub.
Octopus

@Octopus peut-on configurer pour télécharger et stocker une copie locale de cela et ensuite pointer le script par programme ..
Sudip Bhandari


1

Comme le souligne bybe, le problème est que presque tout le contenu servi par raw.github.com est envoyé sous forme de fichier texte - de cette façon, le contenu est rendu en texte brut dans votre navigateur sans qu'aucune autre application ou problème ne gêne. Sinon, vous pourriez vous retrouver dans une situation où tenter d'afficher un fichier .js pourrait amener le navigateur à tenter de l'exécuter plutôt que de vous le montrer.

De plus, ni github ni pages.github n'essaient d'être un CDN. Vous devriez vraiment soit:

  1. Hébergez le fichier vous-même, ce n'est pas si grand.
  2. Utilisez un CDN dédié pour cela et d'autres fichiers statiques sur votre site.
  3. Utilisez quelque chose comme cdnjs.com qui propose différentes versions de lessjs .
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.