Chromeは「リソースはスクリプトとして解釈されますが、MIMEタイプtext / plainで転送されます」と言っていますが、何が原因ですか


316

FFなどでは、私のJavaScriptは問題なく動作します。しかし、Chromeでは次のメッセージが表示されます。

リソースはスクリプトとして解釈されますが、MIMEタイプtext / plainで転送されます。

すべてのスクリプトタグを確認しましたが、すべてにが付いていMIME type="text/javascript"ます。jqueryとjquery uiでもそうです。Chromeの何が問題になっていますか?

これの問題と修正は何ですか?ブラウザの「オプション」を変更する必要があるのですか、それともサーバーから変更する必要がありますか、それともコードを微調整する必要がありますか?


14
いくつかのコードが役に立ちます。ほとんどの場合、間違いを犯すことになるので、どんなに魅力的であっても、最初にコンパイラ(ブラウザ)を責めないでください。
msw 2010

好奇心の問題として、あなたはhtml5を使用していますか?
bollo 2011

回答:


203

これは、サーバーがJavaScript HTTP応答を送信していることを意味します

Content-Type: text/plain

JavaScript応答を送信するようにサーバーを構成する必要があります

Content-Type: application/javascript

3
Weblogic Server 11gを使用していますが、MIMEをどこに構成できるのかわかりません。どうか、道を教えてくれませんか?
Shaoz、2010

6
サーバーが存在しない場合はどうでしょうか。しかし、スクリプトは実際にはローカルファイルシステム上のJSONPファイルですか?それは深刻ではなく、あなたの制御を超えているので、警告を無視してください。
ヒッピートレイル2012

2
それはする必要がありますcontent-type:application/javascript、しかしapplication/x-javascriptあるないRFCやECMAScriptの標準。
Jasdeep Khalsa 2013

同様の質問がたくさんあります。この答えは私にとって簡単な修正でした:stackoverflow.com/a/12057490/1617395
Joe Leo

@JoeLeo:IIS用です。
SLaks 2013

124

これは、jQueryまたはクライアント側のスクリプトコードの癖とは何の関係もありません。これはサーバー側の問題です。サーバー(側のアプリケーション)が、クライアント側のスクリプトリソースに必要なHTTP Content-Typeヘッダーフィールド値を送信していません。これは、Webサーバーが十分に構成されていないか、正しく構成されていない場合、またはサーバー側のアプリケーション(PHPなど)がクライアント側のスクリプトリソースを生成している場合に発生します。

JavaScriptのようなECMAScript実装に適したMIMEメディアタイプは次のとおりです。

  • text/javascript廃止として登録さ、非推奨ではありませんが、まだ有効であり、サポートが最適です
  • text/ecmascript廃止として登録さ、非推奨ではありませんが、まだ有効です
  • application/javascript
  • application/ecmascript

上記のMIMEメディアタイプは現在標準ツリーに登録されているため、これらは含まれていませんapplication/x-javascript(したがって、実験的なものを使用する必要はなく、もう必要ありません)。Cf. RFC 4329、 "Scripting Media Types"(2005 CE)と私のテストケース:Scripting Media Typesのサポート

1つの解決策は、すでに推奨されているように、可能であればサーバーを構成することです。Apacheの場合、これはディレクティブを追加するのと同じくらい簡単です

AddType text/javascript .js

(詳細については、Apache HTTP Serverのドキュメントを参照してください)。

しかし、クライアント側のスクリプトリソースがPHPなどのサーバー側のアプリケーションによって生成さContent-Typeれた場合、デフォルトでは次のようにヘッダーフィールドの値を明示的に設定する必要がありますtext/html

<?php
  header('Content-Type: text/javascript; charset=UTF-8');
  // ...
?>

(これと同様のステートメントは、他の出力の前に置く必要があります。PHPマニュアルを参照してください。それ以外の場合、HTTPメッセージ本文はすでに開始されていると見なされ、遅すぎてヘッダーフィールドを送信できません。)

サーバー上にプレーンな.jsファイルがある場合でも、サーバー側での生成はクライアント側のスクリプトリソースで簡単に発生する可能性があります。リクエストの数(より効率的です)、またはサーバーサイドアプリケーションによって他の方法で最小化されます。


1
サーバーにアクセスできない場合はどうなりますか?
アドニスK.カクリディス

1
持っている人を探します。
PointedEars 2013

この説明をありがとうございました。「JSONPの子を送信するだけです。その方法を知っておくべきだ」など、生意気な人が多すぎると言っています。あなたが持っているようにそれを適切に説明するのに時間がかかるとき、それは一日のように明確です。これにより、数週間にわたって抱えていた問題が修正されました。再度、感謝します!

@リック-777:私はあなたの変更にコメントすることなく私の答えを変更することを感謝しません。あなたは慎重に私の答えを読めば、私がお勧めする理由、あなたは実感text/javascriptを超えますapplication/javascript。それがapplication/javascript今より良い答えであると信じる理由があるなら、あなたがすべき最低限のことはコメントで自分自身説明することです。スタックオーバーフローの通知メカニズムを使用して変更を認識できるようにすることは不適切です。私は、あなたの変更を、ファジングと呼び、この質問への回答に戻しました。
PointedEars、2015年

19

WeblogicなどのJavaアプリケーションサーバーの場合

1)weblogic.xmlファイルにエラーがないことを確認します

このように:

    <?xml version = '1.0' encoding = 'windows-1252'?>
<weblogic-web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                  xsi:schemaLocation="http://www.bea.com/ns/weblogic/weblogic-web-app http://www.bea.com/ns/weblogic/weblogic-web-app/1.0/weblogic-web-app.xsd"
                  xmlns="http://www.bea.com/ns/weblogic/weblogic-web-app">
    <container-descriptor>
        <prefer-web-inf-classes>true</prefer-web-inf-classes>
    </container-descriptor>
    <context-root>MyWebApp</context-root>
</weblogic-web-app>

2)web.xmlファイルにJavaScriptのMIMEタイプを追加します。

    ...
        </servlet-mapping>

        <mime-mapping>    
            <extension>js</extension>        
            <mime-type>application/javascript</mime-type>        
        </mime-mapping>

        <welcome-file-list>
    ...

これは他のJavaコンテナでも機能します- application/javascript現在有効なMIMEタイプはTomcatなどです。のような他のものtext/javascriptは廃止されました。

3)ブラウザのキャッシュをクリアするか、CTRL-F5を押す必要がある場合があります。


7

私はこの問題を抱えていて、それを修正する方法を見つけました。

これは、スタイル(CSS)ファイルが、.cssファイルを参照するPHPファイルとは異なるエンコーディングにある場合に発生します。

たとえば、UnixエンコーディングでjQuery.jsを使用し、UTF-8でindex.phpを使用すると、この問題が発生するため、UTF-8または他のエンコーディングを同じにする必要があります。


7

PHPファイルを使用してJavaScriptを生成する場合は、ファイルの先頭に次のコードを追加します。

<?php Header("Content-Type: application/x-javascript; charset=UTF-8"); ?>

別のヘッダーを定義している場合は、それを置き換えてエラーが発生しないようにします。
2012

1
PointedEarsの投稿に加えて、これは一見返答のない問題を修正するのに役立ち、何週間も頭を悩ませてきました。どうもありがとう:D Googleで「PHPドキュメントにヘッダーを設定する方法」と入力すると、なぜ1000の誤った結果が表示されるので、どうすればよいかわかりませんが、ついに投稿を見つけましたlol

3

あなたのApacheのhttpd.confに、そのような行を追加してください:

AddType application/x-javascript .js

ぼくの " .js"エントリには、IIS 8 MIMEタイプの下に "application / javascript"がありました。「 .js」エントリを「application / x-javascript」に変更すると、うまくいきました。これは、ExtJS / ASP.NET / ExtDirect4DotNetアプリケーションから発生した
MacGyver

3

私はここで他の答えよりも愚かな理由でこのデバッグメッセージを受信しました:これは、十分なスリープが得られず、cssファイルの構文を使用してjsファイルを参照しない場合に受信されるエラーメッセージです。のように、

<link rel='stylesheet' type='text/css' href='clearly_javascript.js'/>

のではなく

<script src='clearly_javascript.js'></script>

これは、エラーメッセージを検索したときに最初に表示される投稿であるため、ここに配置したと思います。


2

奇妙な問題ですが、これは私の問題を解決するのに役立ちました。時には、最も簡単なことでさえ理解するのが難しい...

/js/main.css私が使用したスクリプトタグで使用する代わりに js/main.css

はい、実際に違いが出ました。私はWAMP / Windowsに座っており、vhostを持っていませんが、使用しただけですlocalhost/<project>

私が参照する場合/js/main.css、参照するのlocalhost/css/main.cssではなくlocalhost/<project>/css/main.css

あなたがそれを考えると、それは非常に明白ですが、誰かがこれにつまずいた場合、私はこの答えを共有すると思いました。


1

サーバーに実際に存在するjsファイルを確認してください。私はこの問題を抱えていて、jsファイルがサーバーにアップロードされておらず、サーバーが実際に代わりにHTMLページを返していることを発見しました。


1

Joomlaに取り組んでいる場合!(を含めるしようとすると、この厄介なエラーが発生します.js)JavaScriptファイルを含めよは、次の解決策が適しています。

最も可能性の高い問題は、.js そこないファイルを含めようとしている、またはそれを誤って配置したことです.js含めようとしてファイルを、そしてJoomla!リソースが見つからない場合、一般的な404メッセージの代わりに、完全なWebページやHTMLなどを含む完全な404メッセージを返します。

Webブラウザーがそれを解釈しているの.jsに対し、必要なファイルが見つからなかったというWebページだけが表示されています

これは


1

私の場合、これをwindow.location代わりに使用したため、一部のページでのみ発生しました$location.url(...);。これで問題が解決しました。理解するのにしばらくかかりました:)


0

Webフレームワークの使用中にこの問題が発生し、関連するJavaScriptファイルを指定された(フレームワークによって)JavaScriptフォルダに移動することで修正しました。


0

これが発生する場合の一般的なことは、スクリプト呼び出しにを含めることを単に忘れた場合ですtype。応じて-あなたはそれがあるとして、明示的に設定する必要がありますW3 - 必要

type(content-type):この属性は、要素のコンテンツのスクリプト言語を指定し、デフォルトのスクリプト言語をオーバーライドします。スクリプト言語はコンテンツタイプとして指定されます(例:)"text/javascript"。著者は、この属性の値を提供する必要があります。この属性にはデフォルト値はありません

それでもブラウザのデフォルト値はのようplain/textです。

例:

<script type="text/javascript" src="http://maps.googleapis.com/maps/api/js?sensor=false&language=en"></script>

Apache構成でそのファイル拡張子のデフォルトを設定することもできます。

<IfModule mod_mime.c>
    AddType text/javascript .js
</IfModule>

0

そのIISがあなたの下であなたcommon HTTP FeaturesStatic Contentオンにしたことを確認する場合


0

同じエラーが発生し、最後に(私の特定のケースでは)デプロイメント記述子(web.xml)に問題が見つかりました

問題:

<servlet-mapping>
    <servlet-name>SessionController</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>
...
<welcome-file-list>
    <welcome-file>/</welcome-file>
</welcome-file-list>

ソリューション:

<servlet-mapping>
    <servlet-name>SessionController</servlet-name>
    <url-pattern>/SessionController</url-pattern>
</servlet-mapping>
...
<welcome-file-list>
    <welcome-file>desktop.jsp</welcome-file>
</welcome-file-list>

0

Spring MVCを使用している場合は、次のmvnタグを追加して、Spring Dispatchサーブレットからリソースファイルを除外できます。

<mvc:resources mapping="/js/*.js" location="/js/"/>
<mvc:resources mapping="/css/*.css" location="/css/"/>
<mvc:resources mapping="/images/*.*" location="/images/"/>

0

私の場合、サーバーは正しいContent-Typeが間違ったを送信していましたContent-EncodingContent-Encoding: gzipgzip されたリソースのみを設定するようにしてください。また、サーバー(私の場合はGoogle Cloud Storage)のヘッダーを修正した後、キャッシュによる変更が適切に反映されるまで数分待つ必要がありました。


0

AdonisJS(REST APIなど)を使用している場合、これを回避する1つの方法は、次のように応答ヘッダーを定義することです。

response.safeHeader('Content-type', 'application/json')

-1

JavaScript(この場合はjQuery)を介して配列の背景画像を変更しようとしたときに、同じ問題が発生していました。

とにかく。

これの代わりに:

m.setStyle('background-image','url(/templates/site/images/style5/'+backgs[i]+')')

これを行う:

eval("m.setStyle('background-image','url(/templates/site/images/style5/'+backgs[i]+')')");

'で構造化された要素内の変数を解析しようとすると、Chrome JavaScriptが台無しになります。私の場合、画像配列が挿入される直前に停止しました。画像のURL +画像名(配列内)を解析する代わりに、画像のURLのみを解析していました。

おそらくコード内を検索して、それがどこで発生するかを確認する必要があります。FF、IE、その他すべてにこの問題はありません。


4
evalできる場合は使用しないでください:javascripttoolbox.com/bestpractices/#eval
インドラ

-1

ここsimon-sarrisが投稿し回答が役に立ちました。

これは私の問題の解決に役立ちました。

Visual Studioインストーラーは、レジストリに誤った行を追加している必要があります。

regeditを開き、次のレジストリキーを確認します。

ここに画像の説明を入力してください

その鍵を参照してください?コンテンツタイプキー?その値をtext / plainからtext / javascriptに変更します。

最後に、クロムは再び呼吸しやすくなります。

Windows 7ではデフォルトでContent TypeもPercievedTypeも存在しないため、両方を安全に削除できる可能性がありますが、編集するだけで十分です。

とにかく、これがあなたのためにもそれを修正してくれることを願っています!

変更後はシステムを再起動することを忘れないでください。


こんにちは。盗作は悪いです。(mmmmkay?)SO ガイドラインに従って、盗作を削除するためにあなたの回答を編集しました。
Samuel Harmer、2015
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.