ChromeはこのJavaScriptファイルの実行を拒否しました


32

私のHTMLページの先頭には、次のものがあります。

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

ブラウザ(Google Chrome v 27.0.1453.116)でページをロードし、開発者ツールを有効にすると、次のように表示されます。

' https://raw.github.com/cloudhead/less.js/master/dist/less-1.3.3.js ' からのスクリプトの実行を拒否しました。MIMEタイプ( 'text / plain')が実行可能でないため、厳密なMIMEタイプのチェックが有効になっています。

実際、スクリプトは実行されません。なぜChromeはこれがプレーンテキストファイルであると考えるのですか?明らかに.jsファイル拡張子が付いています。

私はHTML5を使用しているtypeため、属性を省略したため、それが問題の原因であると考えました。そこでtype="text/javascript"<script>タグに追加し、同じ結果を得ました。私も試しましたがtype="application/javascript"、それでも同じエラーが発生しました。

それから私はそれをtype="text/plain"好奇心からだけに変えてみました。ブラウザはエラーを返しませんでしたが、もちろんJavaScriptも実行されませんでした。

最後に、ファイル名のピリオドがブラウザを無効にしている可能性があると考えました。したがって、私のHTMLコードでは、すべてのピリオドをURLエスケープ文字に変更しました%2E

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

これはまだ機能しませんでした。本当に機能するのは(ブラウザがエラーを出さず、JSが正常に実行される)唯一のことは、ファイルをダウンロードしてローカルディレクトリにアップロードし、src値をローカルファイルに変更することです。私は自分のウェブサイトのスペースを節約しようとしているので、これをやめたいです。

リンクされたファイルが実際にJavaScriptタイプであることをChromeに認識させるにはどうすればよいですか?

回答:


16

これはあなたが言及したパス上でホスティングがGithubでセットアップされる方法であるため、あなたの問題は制御できません。ブラウザはファイルをレンダリングします。

ホストがそうするようにセットアップされている場合、.zipファイルを.htmlファイルとしてレンダリングすることができます。firebugを使用し、要求に対するヘッダー応答を表示することにより、これを自分で確認できます。 JSファイルですが、ヘッダー応答は異なる期待値を返します。ブラウザは要求されたものではなくヘッダー応答を尊重します...

生のサブドメインでホストしているgithubはContent-Type text/plain; charset=utf-8、JSとしてではなく生のテキストとして実行されることを意味するMIMEタイプとして返されます。以下は、ファイルをレンダリングするためにサーバーが返す必要がある例です。 githubによって返されているコード。

JS MIMEタイプをサポートするサーバーは次のようになります。

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

そして、これはhttps://raw.github.com/cloudhead/less.js/master/dist/less-1.3.3.jsヘッダーが(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

えー、何?それで、修正は何ですか?
パブラム

2
あなたのコントロール内の適切なホストが修正または使用で使用@pabrams rawgit
サイモン・ヘイター

25

2018年12月編集

RawGitは現在、悪意のある使用により廃止されているため、代わりに次のサービスのいずれかを使用することをお勧めします。


元の投稿

Rawgithub.comを使用すると、ユーザーはGitの「未加工」バージョンを取得して、<script>タグで使用可能なURLに変換できます。使い方は非常に簡単で.、生のURLから最初のURLを削除するだけです。たとえば、これ:

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

変わるでしょう。この

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

そして<script>、適切なタイプのタグに入れます。簡単!

本番環境ではなく開発目的のみを対象としているため、リクエストの数を制限します。

2014編集

Reinderienが述べたように、rawgithubは現在rawgitに過ぎないため、新しいスクリプトリンクは

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

6
rawgithubのホームページに書かれていますが、本番サイトには使用しないでください。また、公式のGithubサイトではないようです。
-DisgruntledGoat

1
私は...それはないと言ったことはありません
ザックSaucier

1
注-これはrawgit.comにリダイレクトされるようになりました。そしてそれは動作します!
Reinderien

1
このサイトは現在、リクエストに対して403を提供し、ヘッダーはそれが日没であることを示しています。
マイケル

@Michael悲しい:(私は提供されたもので私の答えを更新しましたので幸いrawgit、そのウェブサイト上でいくつかの選択肢を提供する。
ザックSaucier

6

ファイル拡張子は無関係であり、重要なのはContent-Typeヘッダーであり、そのファイルはtext/plainコンテンツタイプ(Githubの「raw」ビューの目的)で提供されます。

実際にファイルのコピーをサイトにローカルにダウンロードし、そこから含める必要があります。Githubから機能していても、JSファイルを非同期にロードしていないため、<script>ページヘッダーにそのタグを挿入すると、サイトはGithubの可用性に依存します。


8
「ファイルのコピーをサイトにローカルにダウンロードして、そこからインクルードする必要があります」、それが鍵です。GitHubからホストされることを意図していません。
タコ

@Octopus我々は...ダウンロードし、そのローカルコピーを保存し、プログラム的にスクリプトを指すように設定することができます
Sudipバンダリ


1

アウトbybeポイントコンテンツは、他のアプリケーションや邪魔になら問題なくお使いのブラウザでテキスト形式でレンダリングされている方法-問題のほぼすべてのコンテンツがテキストファイルとしてダウン送られraw.github.comによってアップ務めていることです。そうしないと、.jsファイルを表示しようとすると、ブラウザーが表示せずに実行しようとする場合があります。

その上、githubもpages.githubもCDNになろうとはしていません。あなたは本当にどちらかをする必要があります:

  1. 自分でファイルをホストします。それほど大きくはありません。
  2. サイト上のこの静的ファイルやその他の静的ファイルには専用のCDNを使用します。
  3. 利用可能なlessjsのさまざまなバージョンを持っているcdnjs.comのようなものを使用してください。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.