Come posso convincere IE a visualizzare semplicemente application / json piuttosto che offrirmi di scaricarlo?


161

Durante il debug delle app jQuery che utilizzano AJAX, ho spesso la necessità di vedere il json che viene restituito dal servizio al browser. Quindi lascerò cadere l'URL per i dati JSON nella barra degli indirizzi.

Questo è bello con ASPNET perché in caso di un errore di codifica, posso vedere la diagostica ASPNET nel browser:

testo alternativo

Ma quando il codice sul lato server funziona correttamente e in realtà restituisce JSON, IE mi chiede di scaricarlo, quindi non riesco a vedere la risposta.

testo alternativo

Posso convincere IE a NON farlo, in altre parole, per visualizzarlo come se fosse un semplice testo?

So che potrei farlo se imposto l'intestazione Content-Type su text/plain.

Ma questo è specificamente il contesto di un'app ASPNET MVC, che imposta automaticamente la risposta quando uso JsonResult su uno dei miei metodi di azione. Inoltre, voglio mantenere il tipo di contenuto appropriato e non modificarlo solo per supportare gli sforzi di debug.


Anche Firefox 3/4 fa questo, se hai un computer che non è stato aggiornato.
Chris S,

8
Mi piace l'uso di "convincere" !!
Adardesign,

Risposte:


234

Ho trovato la risposta

È possibile configurare IE8 per visualizzare application / json nella finestra del browser aggiornando il registro. Non è necessario uno strumento esterno. Non l'ho provato ampiamente, ma funziona con IE8 su Vista.

Per usarlo, ricorda, si applicano tutti i soliti avvertimenti sull'aggiornamento del registro. Stop IE. Quindi, taglia e incolla quanto segue in un file, con il nome di 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

Quindi fare doppio clic sul file .reg. Riavvia IE. Il nuovo comportamento che si ottiene quando si solletica un URL che restituisce un documento con Content-Type: application/jsono Content-Type: text/jsonè così:

testo alternativo

Cosa fa, perché funziona:

Il 25336920-03F9-11cf-8FD0-00AA00686F13è il CLSID per l'azione "Browse in atto". Fondamentalmente questa voce di registro dice a IE che per i documenti che hanno un tipo MIME di application / json, basta vederlo in posizione. Ciò non influirà su alcun documento application / json scaricato tramite <script>tag o tramite XHR e così via.

Le chiavi CLSID e codifica ottengono gli stessi valori utilizzati per image/gif, image/jpege text/html.

Questo suggerimento proviene da questo sito e dall'articolo di Microsoft Gestione dei tipi MIME in Internet Explorer .


In FF, non è nemmeno necessario un componente aggiuntivo esterno. Puoi semplicemente usare lo view-source:pseudo-protocollo. Inserisci un URL come questo nella barra degli indirizzi:

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

Questo pseudo-protocollo era supportato anche in IE, fino a WinXP-sp2, quando Microsoft lo disabilitava per motivi di sicurezza.


13
Se vuoi saltare la creazione del file di registro, ecco un one-liner che puoi incollare in una finestra di 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
Jason R. Coombs,

2
@nathanvda, non è necessario chiedere nulla alla maggior parte del mondo. Mostrare JSON nel browser è qualcosa che uno sviluppatore di una pagina AJAX vorrebbe fare. Non è assolutamente necessario visualizzare JSON nel browser per utenti regolari.
Cheeso,

3
Ho commesso l'errore fatale di consentire a un amico di prendere in prestito la mia scatola e ha eseguito questa correzione. Qualcuno sa quali sono le impostazioni originali per poterle invertire?
KevDog

7
@Mosh, questo è stato citato da Nathanvda sopra, la soluzione non è che gli utenti del sito Web possano visualizzare il JSON, è semplicemente per uno scopo di debug. Leggi l'intera domanda.
Anthony Shaw,

2
Questo funziona ancora in IE11 su Win 8.1. Non è nemmeno necessario riavviare il browser. Nel mio caso avevo bisogno della text/jsonchiave.
Chris,

15

Ho avuto un problema simile. Stavo usando il jQuery "$. GetJSON" e tutto funzionava perfettamente in Firefox e Chrome.

Ma non ha funzionato in IE. Quindi ho provato ad accedere direttamente all'URL di json, ma in IE mi ha chiesto se volevo scaricare il file.

Dopo molte ricerche ho visto che ci doveva essere un'intestazione nel risultato con un tipo di contenuto, nel mio caso, il tipo di contenuto era:

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

Ma quando la pagina che ha effettuato la richiesta riceve questo json, in IE, devi specificare LO STESSO TIPO DI CONTENUTO, nel mio caso era:

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

abbracci


Questo ha funzionato per me, non è necessario scherzare con il registro, basta cambiare anche l'intestazione della risposta "text / html".
64k

2
Come funziona in IE7 quando si effettua una chiamata Ajax e riceve di conseguenza json? Non sto usando getJSON ma piuttosto una chiamata .ajax. Ho usato quel tipo di contenuto in risposta e intestazione e non aiuta affatto. Nemmeno con json2.js. Qualcuno ha implementazioni di successo di questo che funzionano in ie7? IE7 rappresenta oltre il 30% dei nostri utenti. Triste ma vero, e un cambio di chiave reg non è un'opzione. Dire a un milione di utenti del governo di eseguire un hack reg non volerà.
CD Smith,

So che questa è una vecchia domanda, ma viene ripetuta, quindi ecco la risposta: la domanda originale riguarda gli sviluppatori che stanno eseguendo il debug del recupero di JSON. La modifica del reg è suggerita come un passo per aiutare quegli sviluppatori. La modifica del registro non è consigliata o consigliata per utenti generici. Inoltre: non è MAI necessario per gli utenti regolari (= un milione di utenti governativi) visualizzare JSON nel browser.
Cheeso,

Basta usare text/plain; charset=UTF-8. Non c'è bisogno di text / html.
perryflynn,

13

Sopra la soluzione mancava qualcosa e sotto il codice dovrebbe funzionare in ogni situazione:

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

Basta salvarlo il file json.reg ed eseguirlo per modificare il registro.


Il mio computer di lavoro è bloccato. Se è necessario aggiungere la riga di comando, vedere questa risposta. stackoverflow.com/questions/13809856/… Grazie OP. Vedo json in IE ........ yay!
granadaCoder

2

Se stai bene con IE che apre JSON in un blocco note, puoi modificare il programma predefinito del tuo sistema per i file .json in Blocco note.

Per fare ciò, creare o trovare un file .json, fare clic con il tasto destro del mouse e selezionare "Apri con" o "Scegli programma predefinito".

Questo potrebbe tornare utile se per caso desideri utilizzare Internet Explorer ma la tua azienda IT non ti consente di modificare il registro. Altrimenti, raccomando le risposte sopra.


1

Uso Fiddler con il plugin JSONViewer per ispezionare JSON. Non penso che sia possibile far funzionare IE senza armeggiare con il registro, forse. Ecco alcune informazioni


1

La modifica delle impostazioni di tipo MIME JSON di IE influirà sul modo in cui IE tratta tutte le risposte JSON.

La modifica dell'intestazione di tipo mime in text / html dirà effettivamente a qualsiasi browser che la risposta JSON che stai restituendo non è JSON ma testo semplice.

Nessuna opzione è preferibile.

Dovresti invece utilizzare un plug-in o uno strumento come il summenzionato Fiddler o qualsiasi altro proxy di ispettore del traffico di rete in cui puoi scegliere ogni volta come elaborare la risposta JSON.


2
text/htmlnon dice al browser che la risposta è un testo semplice, ma HTML. Se decidi di volere testo semplice, usa text/plain. Altrimenti puoi finire con alcune interessanti vulnerabilità XSS.
Michael Mior,

0

FireFox + FireBug è ottimo per questo scopo. Per IE c'è una barra degli strumenti per sviluppatori che non ho mai usato e che intendo utilizzare, quindi non posso fornire molti feedback.


sì, conosco il plugin FF che consente la visualizzazione di application / json come testo normale. In particolare, voglio sapere di IE.
Cheeso,

C'è una barra degli strumenti per sviluppatori per IE. A proposito ecco un bel confronto tra diversi strumenti per gli sviluppatori: elegantcode.com/2009/05/18/…
Darin Dimitrov

0

Ho appena avuto lo stesso problema con un XMLHttpRequest. Il sito funziona perfettamente in Chrome e FF e in dozzine su decine di browser Internet Explorer in produzione. Questa macchina ONE (quella che la nostra azienda sta configurando per essere una macchina demo, ovviamente) ha deciso che avrebbe richiesto di salvare la risposta json a una richiesta Ajax.

La soluzione di regedit accettata di seguito l'ha risolta. Grazie.


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.