IEにアプリケーション/ jsonをダウンロードするのではなく、単に表示するように説得するにはどうすればよいですか?


161

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

コーディングエラーが発生した場合、ブラウザーでASPNET診断を確認できるため、これはASPNETには適しています。

代替テキスト

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

代替テキスト

IEにそれを行わせない、つまりプレーンテキストのように表示するようにできますか?

Content-Typeヘッダーをに設定すると、これを実行できることはわかっていますtext/plain

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


更新されていないマシンを使用している場合、Firefox 3/4もこれを行います。
Chris S

8
「納得」の使い方が好き!!
adardesign 2013

回答:


234

答えを見つけました。

レジストリを更新することで、ブラウザーウィンドウに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を再起動します。でドキュメントを返すURLくすぐりときに取得、新しい動作Content-Type: application/jsonContent-Type: text/json、このようなものですが。

代替テキスト

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

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

CLSIDとエンコードキーがために使用したのと同じ値を取得image/gifimage/jpegtext/html

このヒントは、このサイト、およびMicrosoftの記事「Internet ExplorerでのMIMEタイプの処理」に由来しています。


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

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

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


13
レジストリファイルの作成をスキップしたい場合は、ここでワンライナーを使用すると、PowerShellウィンドウに貼り付けることができます:reg add "HKEY_CLASSES_ROOT\MIME\Database\Content Type\application/json" /t REG_SZ /d "{25336920-03F9-11cf-8FD0-00AA00686F13}"; reg add "HKEY_CLASSES_ROOT\MIME\Database\Content Type\application/json" /v Encoding /t REG_DWORD /d 0x08000000
ジェイソンR.クームス

2
@nathanvda、世界の大部分に何も尋ねる必要はありません。ブラウザでJSONを表示することは、AJAXページの開発者がしたいことです。通常のユーザーがブラウザでJSONを表示する必要はまったくありません。
Cheeso

3
私は友人が私の箱を借りることを許すという致命的な間違いを犯し、彼はこの修正を実行しました。元の設定を知っているので、元に戻すことができますか?
KevDog 2013年

7
@Mosh、これは上記のnathanvdaで言及されましたが、解決策はWebサイトのユーザーがJSONを表示できるようにするためではなく、単にデバッグ目的のためです。質問全体を読んでください。
Anthony Shaw

2
これは、Win 8.1のIE11でも機能しています。ブラウザを再起動する必要すらありませんでした。私の場合、text/json鍵が必要でした。
Chris

15

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

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

多くの検索の結果、コンテンツタイプのヘッダーが結果に含まれていることがわかりました。私の場合、コンテンツタイプは次のとおりです。

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

しかし、リクエストを行ったページがこのjsonを受け取るとき、IEでは、同じコンテンツタイプを指定する必要があります。

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

抱擁


これは私にとってはうまくいきました、レジストリをいじる必要はありません、単に "text / html"の応答ヘッダーも変更してください。
64k 2012年

2
IE7でAjax呼び出しを行い、結果としてjsonを受け取った場合、これはどのように機能しますか?私はgetJSONではなく、.ajax呼び出しを使用しています。そのコンテンツタイプをレスポンスとヘッダーで使用しましたが、まったく役に立ちません。json2.jsも使用しませんでした。ie7で機能する実装が成功している人はいますか?IE7はユーザーの30%以上を占めています。悲しいが本当で、regキーの変更はオプションではありません。100万人の政府ユーザーに登録ハックを実行するように伝えるだけでは成功しません。
CDスミス

私はこれが古い質問であることを知っていますが、繰り返されているので、ここに答えがあります:元の質問は、JSONの取得をデバッグしている開発者に関係します。これらの開発者を支援するステップとして、regを変更することをお勧めします。レジストリの変更は、一般ユーザーには推奨または推奨されていません。また:通常のユーザー(= 100万人の政府ユーザー)がブラウザーでJSONを表示する必要はありません。
Cheeso 2014年

だけを使用してくださいtext/plain; charset=UTF-8。text / htmlは必要ありません。
perryflynn 2016

13

上記のソリューションには欠けているものがあり、以下のコードはすべての状況で機能するはずです:

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を保存し、実行してレジストリを変更するだけです。


仕事用のコンピューターがロックされています。コマンドラインでこれらを追加する必要がある場合は、この回答を参照してください。 stackoverflow.com/questions/13809856/…OPに 感謝します。IEでjsonが表示されます。
granadaCoder 2018

2

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

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

これは、偶然にInternet Explorerを使用したいが、IT企業がレジストリの編集を許可していない場合に便利です。それ以外の場合は、上記の回答をお勧めします。



1

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

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

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

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


2
text/htmlは、応答がプレーンテキストではなくHTMLであることをブラウザに通知しません。プレーンテキストが必要な場合は、を使用してくださいtext/plain。そうしないと、興味深いXSS脆弱性が発生する可能性があります。
Michael Mior 2013年

0

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


うん、私は通常のテキストとしてapplication / jsonの表示を可能にするFFプラグインについて知っています。IEについて具体的に知りたいのですが。
Cheeso

IE用の開発者ツールバーがあります。ちなみに、ここでは開発者向けのさまざまなツールの優れた比較を示します。elegantcode.com
Darin Dimitrov

0

XMLHttpRequestで同じ問題が発生しました。このサイトはChromeとFFで問題なく機能し、製品版の数十のInternet Explorerブラウザーでは数十に上ります。このONEマシン(もちろん、当社がデモマシンになるように設定しているマシン)は、ajaxリクエストに対するjson応答を保存するように促すことを決定しました。

以下の承認済みのregeditソリューションで修正されました。ありがとう。


-1

Fiddlerで応答を確認できます:http : //www.fiddler2.com/fiddler2/

それはそのようなもののための素晴らしいツールです!


私はフィドラーについて知っていますが、これほど単純なものにはやり過ぎのようです。
Cheeso
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.