Wie kann ich den IE davon überzeugen, einfach application / json anzuzeigen, anstatt anzubieten, sie herunterzuladen?

161

Beim Debuggen von jQuery-Apps, die AJAX verwenden, muss häufig der JSON angezeigt werden, der vom Dienst an den Browser zurückgegeben wird. Also werde ich die URL für die JSON-Daten in die Adressleiste einfügen.

Dies ist gut mit ASPNET, da ich im Falle eines Codierungsfehlers die ASPNET-Diagostik im Browser sehen kann:

Alt-Text

Wenn der serverseitige Code jedoch ordnungsgemäß funktioniert und JSON tatsächlich zurückgibt, fordert mich der IE auf, ihn herunterzuladen, sodass die Antwort nicht angezeigt wird.

Alt-Text

Kann ich den IE dazu bringen, das NICHT zu tun, mit anderen Worten, es einfach so anzuzeigen, als wäre es einfacher Text?

Ich weiß, dass ich dies tun könnte, wenn ich den Content-Type-Header auf setze text/plain.

Dies ist jedoch speziell der Kontext einer ASPNET MVC-App, die die Antwort automatisch festlegt, wenn ich JsonResult für eine meiner Aktionsmethoden verwende. Außerdem möchte ich den entsprechenden Inhaltstyp beibehalten und nicht nur ändern, um die Debugging-Bemühungen zu unterstützen.

Cheeso
quelle
Firefox 3/4 tut dies auch, wenn Sie einen Computer haben, der nicht aktualisiert wurde.
Chris S
8
Ich mag die Verwendung von "überzeugen" !!
Adardesign

Antworten:

234

Ich habe die Antwort gefunden.

Sie können IE8 so konfigurieren, dass application / json im Browserfenster angezeigt wird, indem Sie die Registrierung aktualisieren. Es ist kein externes Tool erforderlich. Ich habe dies nicht allgemein getestet, aber es funktioniert mit IE8 unter Vista.

Denken Sie daran, dass alle üblichen Einschränkungen beim Aktualisieren der Registrierung gelten. Stoppen Sie den IE. Schneiden Sie dann Folgendes aus und fügen Sie es unter dem Namen in eine Datei ein 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

Doppelklicken Sie dann auf die REG-Datei. Starten Sie den IE neu. Das neue Verhalten, das Sie beim Kitzeln einer URL erhalten, die ein Dokument mit Content-Type: application/jsonoder Content-Type: text/jsonwie folgt zurückgibt :

Alt-Text

Was es macht, warum es funktioniert:

Das 25336920-03F9-11cf-8FD0-00AA00686F13ist die CLSID für die „Browse in place“ Aktion. Grundsätzlich sagt dieser Registrierungseintrag dem IE, dass für Dokumente, die einen MIME-Typ von Anwendung / JSON haben, diese einfach an Ort und Stelle angezeigt werden. Dies wirkt sich nicht auf Anwendungs- / JSON-Dokumente aus, die über <script>Tags oder XHR usw. heruntergeladen wurden .

Die CLSID und Encoding Schlüssel bekommen die gleichen Werte für verwendet image/gif, image/jpegund text/html.

Dieser Hinweis stammt von dieser Site und aus dem Artikel von Microsoft zum Umgang mit MIME-Typen in Internet Explorer .


In FF benötigen Sie auch kein externes Add-On. Sie können einfach das view-source:Pseudoprotokoll verwenden. Geben Sie eine URL wie diese in die Adressleiste ein:

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

Dieses Pseudoprotokoll wurde auch im IE unterstützt, bis WinXP-sp2, als Microsoft es aus Sicherheitsgründen deaktivierte.

Cheeso
quelle
13
Wenn Sie das Erstellen der Registrierungsdatei überspringen möchten, können Sie einen Einzeiler in ein Powershell-Fenster einfügen: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
Jason R. Coombs
2
@ Nathanvda, es ist nicht nötig, den größten Teil der Welt etwas zu fragen. Das Anzeigen von JSON im Browser ist etwas, was ein Entwickler einer AJAX-Seite tun möchte. Es ist völlig unnötig, JSON für normale Benutzer im Browser anzuzeigen.
Cheeso
3
Ich habe den fatalen Fehler gemacht, einem Freund zu erlauben, meine Box auszuleihen, und er hat diesen Fix ausgeführt. Weiß jemand, wie die ursprünglichen Einstellungen sind, damit ich sie umkehren kann?
KevDog
7
@Mosh, dies wurde von Nathanvda oben erwähnt. Die Lösung ist nicht so, dass Benutzer der Website den JSON anzeigen können, sondern lediglich zu Debugging-Zwecken. Lesen Sie die gesamte Frage.
Anthony Shaw
2
Dies funktioniert immer noch in IE11 unter Win 8.1. Ich musste den Browser nicht einmal neu starten. In meinem Fall brauchte ich den text/jsonSchlüssel.
Chris
15

Ich hatte ein ähnliches Problem. Ich habe die jQuery "$. GetJSON" verwendet und in Firefox und Chrome hat alles perfekt funktioniert.

Aber es hat im IE nicht funktioniert. Also habe ich versucht, direkt auf die URL von json zuzugreifen, aber im IE wurde gefragt, ob ich die Datei herunterladen möchte.

Nach langem Suchen stellte ich fest, dass das Ergebnis einen Header mit einem Inhaltstyp enthalten muss. In meinem Fall war der Inhaltstyp:

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

Aber wenn die Seite, die die Anfrage gestellt hat, diesen JSON erhält, müssen Sie im IE den gleichen Inhaltstyp angeben, in meinem Fall:

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

Umarmungen

Fillipe Silva
quelle
Dies funktionierte für mich, kein Durcheinander mit der Registrierung erforderlich, ändern Sie einfach den Antwortheader zu "text / html".
64k
2
Wie funktioniert dies in IE7, wenn ein Ajax-Anruf getätigt wird und als Ergebnis json empfangen wird? Ich verwende nicht getJSON, sondern einen .ajax-Aufruf. Ich habe diesen Inhaltstyp in Antwort und Header verwendet und es hilft überhaupt nicht. Auch json2.js wurde nicht verwendet. Hat jemand erfolgreiche Implementierungen davon, die in IE7 funktionieren? IE7 repräsentiert mehr als 30% unserer Benutzer. Traurig, aber wahr, und eine Änderung der Registrierungsschlüssel ist keine Option. Es wird nicht funktionieren, einer Million Regierungsbenutzern zu sagen, dass sie nur einen Reg-Hack ausführen sollen.
CD Smith
Ich weiß, dass dies eine alte Frage ist, aber sie wird wiederholt. Hier ist die Antwort: Die ursprüngliche Frage bezieht sich auf ENTWICKLER, die das Abrufen von JSON debuggen. Das Ändern der Registrierung wird als Schritt vorgeschlagen, um diesen Entwicklern zu helfen. Das Modyfing der Registrierung wird allgemeinen Benutzern nicht empfohlen oder empfohlen. Außerdem müssen reguläre Benutzer (= eine Million Regierungsbenutzer) NIEMALS JSON im Browser anzeigen.
Cheeso
Einfach benutzen text/plain; charset=UTF-8. Keine Notwendigkeit für Text / HTML.
Perryflynn
13

Die obige Lösung fehlte, und der folgende Code sollte in jeder Situation funktionieren:

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

Speichern Sie einfach die Datei json.reg und führen Sie sie aus, um Ihre Registrierung zu ändern.

Tomasz Maj
quelle
Mein Arbeitscomputer ist gesperrt. Wenn Sie diese über die Befehlszeile hinzufügen müssen, lesen Sie diese Antwort. stackoverflow.com/questions/13809856/… Danke OP. Ich sehe json im IE ........ yay!
GranadaCoder
2

Wenn Sie damit einverstanden sind, dass der IE den JSON nur in einem Editor öffnet, können Sie das Standardprogramm Ihres Systems für JSON-Dateien in Notepad ändern.

Erstellen oder suchen Sie dazu eine JSON-Datei, klicken Sie mit der rechten Maustaste und wählen Sie "Öffnen mit" oder "Standardprogramm auswählen".

Dies kann nützlich sein, wenn Sie zufällig den Internet Explorer verwenden möchten, Ihr IT-Unternehmen jedoch nicht zulässt, dass Sie Ihre Registrierung bearbeiten. Ansonsten empfehle ich die obigen Antworten.

Porschiey
quelle
1

Ich verwende Fiddler mit dem JSONViewer- Plugin, um JSON zu überprüfen. Ich denke nicht, dass es möglich ist, IE dazu zu bringen, sich zu verhalten, ohne vielleicht mit der Registrierung herumzuspielen. Hier sind einige Informationen.

Chetan S.
quelle
1

Das Ändern der JSON-MIME-Einstellungen des IE wirkt sich auf die Art und Weise aus, wie der IE alle JSON-Antworten behandelt .

Wenn Sie den Header vom Typ MIME in Text / HTML ändern, wird jedem Browser effektiv mitgeteilt, dass die von Ihnen zurückgegebene JSON-Antwort nicht JSON, sondern einfacher Text ist.

Keine der Optionen ist vorzuziehen.

Stattdessen möchten Sie ein Plugin oder Tool wie den oben genannten Fiddler oder einen anderen Proxy-Proxy für den Netzwerkverkehr verwenden, bei dem Sie jedes Mal auswählen können, wie die JSON-Antwort verarbeitet werden soll.

user1632922
quelle
2
text/htmlteilt dem Browser nicht mit, dass es sich bei der Antwort um einfachen Text handelt, sondern um HTML. Wenn Sie sich für einfachen Text entscheiden, verwenden Sie text/plain. Andernfalls kann es zu interessanten XSS-Schwachstellen kommen.
Michael Mior
0

FireFox + FireBug ist für diesen Zweck sehr gut geeignet. Für IE gibt es eine Entwickler-Symbolleiste, die ich noch nie verwendet habe und verwenden möchte, sodass ich nicht viel Feedback geben kann.

Darin Dimitrov
quelle
Ja, ich kenne das FF-Plugin, mit dem application / json als normaler Text angezeigt werden kann. Ich möchte jedoch speziell etwas über IE wissen.
Cheeso
Es gibt eine Entwickler-Symbolleiste für IE. Übrigens hier ein schöner Vergleich verschiedener Tools für Entwickler: elegantcode.com/2009/05/18/…
Darin Dimitrov
0

Ich hatte gerade das gleiche Problem mit einer XMLHttpRequest. Die Site funktioniert einwandfrei in Chrome und FF sowie in Dutzenden von Internet Explorer-Browsern in der Produktion. Diese EINE Maschine (die unsere Firma natürlich als Demomaschine einrichtet) hat beschlossen, die JSON-Antwort auf eine Ajax-Anfrage zu speichern.

Die unten akzeptierte Regedit-Lösung hat das Problem behoben. Vielen Dank.

Kintar
quelle
-1

Sie konnten die Antwort in Fiddler sehen: http://www.fiddler2.com/fiddler2/

Das ist ein schönes Werkzeug für solche Dinge!

Asgerhallas
quelle
Ich weiß über Fiddler Bescheid, aber es scheint übertrieben für etwas so Einfaches.
Cheeso