web-dev-qa-db-ja.com

IEにapplication / jsonをダウンロードするのではなく単に表示するように説得するにはどうすればよいですか?

AJAXを使用するjQueryアプリのデバッグ中に、サービスからブラウザーに返されるjsonを確認する必要があることがよくあります。そのため、JSONデータのURLをアドレスバーにドロップします。

ASPNETでは、コーディングエラーが発生した場合、ブラウザでASPNETの診断が表示されるため、これは素晴らしいことです。

alt text

しかし、サーバー側のコードが正しく機能し、実際にJSONを返すと、IEからダウンロードするように求められるため、応答が表示されません。

alt text

IEを取得して、それを行わない、つまり、プレーンテキストであるかのように表示することはできますか?

Content-Typeヘッダーをtext/plainに設定すると、これができることを知っています。

しかし、これは具体的にはASPNET MVCアプリのコンテキストであり、アクションメソッドの1つでJsonResultを使用すると自動的に応答が設定されます。また、適切なコンテンツタイプを保持し、デバッグ作業をサポートするためだけに変更しないようにします。

158
Cheeso

答えを見つけました。

レジストリを更新することにより、ブラウザウィンドウにapplication/jsonを表示するようにIE8を構成できます。外部ツールは必要ありません。私はこれを広くテストしていませんが、Vista上のIE8で動作します。

これを使用するには、レジストリの更新に関する通常の注意事項がすべて適用されることを忘れないでください。 IEを停止します。次に、以下をjson-ie.regという名前で切り取ってファイルに貼り付けます。

Windows Registry Editor Version 5.00
;
; Tell IE to open JSON documents in the browser.  
; 25336920-03F9-11cf-8FD0-00AA00686F13 is the CLSID for the "Browse in place" .
;  

[HKEY_CLASSES_ROOT\MIME\Database\Content Type\application/json]
"CLSID"="{25336920-03F9-11cf-8FD0-00AA00686F13}"
"Encoding"=hex:08,00,00,00

[HKEY_CLASSES_ROOT\MIME\Database\Content Type\text/json]
"CLSID"="{25336920-03F9-11cf-8FD0-00AA00686F13}"
"Encoding"=hex:08,00,00,00

次に、.regファイルをダブルクリックします。 IEを再起動します。 Content-Type: application/jsonまたはContent-Type: text/jsonを含むドキュメントを返すURLをくすぐるときの新しい動作は次のとおりです。

alt text

それが何をするのか、なぜ機能するのか:

25336920-03F9-11cf-8FD0-00AA00686F13は、「その場で参照」アクションのCLSIDです。基本的に、このレジストリエントリはIEに、MIMEタイプのapplication/jsonを持つドキュメントの場合、そのまま表示することを伝えています。これは、<script>タグやXHRなどを介してダウンロードされたapplication/jsonドキュメントには影響しません。

CLSIDキーとエンコーディングキーは、image/gifimage/jpeg、およびtext/htmlに使用される値と同じ値を取得します。

このヒントは このサイト とMicrosoftの記事 Internet ExplorerでのMIMEタイプの処理 に由来します。


FFでは、外部アドオンも必要ありません。 view-source:擬似プロトコルを使用できます。次のようなURLをアドレスバーに入力します。

view-source:http://myserver/MyUrl/That/emits/Application/json

この擬似プロトコルは、Microsoftがセキュリティ上の理由で無効にしたWinXP-sp2まで、IEでもサポートされていました。

227
Cheeso

同様の問題がありました。 「$。GetJSON」jQueryを使用していましたが、すべてがFirefoxとChromeで完全に機能しました。

しかし、IEでは機能しませんでした。そのため、jsonのURLに直接アクセスしようとしましたが、IEでファイルをダウンロードするかどうかを尋ねられました。

多くの検索を行った結果、コンテンツタイプの結果にヘッダーが必要であることがわかりました。私の場合、コンテンツタイプは次のとおりです。

header("Content-type: text/html; charset=iso-8859-1");

しかし、リクエストを行ったページがこのjsonをIEで受信すると、SAME CONTENT-TYPEを指定する必要があります。私の場合は:

$.getJSON (
"<? site_url php echo (" ajax / tipoMenu ")?>"
{contentType: 'text / html; charset = utf-8'},
function (result) {

抱擁

15
Fillipe Silva

上記の解決策は欠落しており、以下のコードはあらゆる状況で機能するはずです:

Windows Registry Editor Version 5.00
;
; Tell IE to open JSON documents in the browser.  
; 25336920-03F9-11cf-8FD0-00AA00686F13 is the CLSID for the "Browse in place" .
;  

[HKEY_CLASSES_ROOT\MIME\Database\Content Type\application/json]
"CLSID"="{25336920-03F9-11cf-8FD0-00AA00686F13}"
"Encoding"=hex:08,00,00,00

[HKEY_CLASSES_ROOT\MIME\Database\Content Type\application/x-json]
"CLSID"="{25336920-03F9-11cf-8FD0-00AA00686F13}"
"Encoding"=hex:08,00,00,00

[HKEY_CLASSES_ROOT\MIME\Database\Content Type\text/json]
"CLSID"="{25336920-03F9-11cf-8FD0-00AA00686F13}"
"Encoding"=hex:08,00,00,00

ファイルjson.regを保存し、実行してレジストリを変更します。

12
Tomasz Maj

IEでJSONをメモ帳に開くだけで問題ない場合は、.jsonファイルのシステムのデフォルトプログラムをメモ帳に変更できます。

これを行うには、.jsonファイルを作成または検索し、マウスを右クリックして、[プログラムから開く]または[デフォルトプログラムの選択]を選択します。

これは、偶然Internet Explorerを使用したいが、IT会社がレジストリの編集を許可しない場合に役立ちます。それ以外の場合は、上記の回答をお勧めします。

2
Porschiey

IEのJSON MIMEタイプ設定を変更すると、IEがall JSON応答を処理する方法に影響します。

MIMEタイプヘッダーをtext/htmlに変更すると、返されるJSON応答がJSONではなくプレーンテキストであることをブラウザーに効果的に通知します。

どちらのオプションも推奨されません。

代わりに、上記のFiddlerなどのプラグインやツール、またはJSON応答の処理方法を毎回選択できる他のネットワークトラフィックインスペクタープロキシを使用する必要があります。

1
user1632922

Fiddler with JSONViewer プラグインを使用してJSONを検査します。おそらくレジストリをいじらずにIEを動作させることは不可能だと思います。 こちら いくつかの情報。

1
Chetan Sastry

FireFox + FireBugは、この目的に非常に適しています。 IEには 開発者ツールバー があります。これは使用したことがないため使用する予定がないため、あまりフィードバックを提供できません。

0
Darin Dimitrov

XMLHttpRequestでも同じ問題が発生しました。このサイトはChromeとFFで機能し、数十から数十のInternet Explorerブラウザが実稼働しています。この1台のマシン(もちろん、当社がデモマシンとして設定しているマシン)は、Ajaxリクエストへのjson応答を保存するためにプロンプ​​トを表示することにしました。

以下の受け入れられているregeditソリューションはそれを修正しました。ありがとう。

0
Kintar