¿Cómo puedo convencer a IE de que simplemente muestre la aplicación / json en lugar de ofrecer la descarga?

161

Mientras depuro aplicaciones jQuery que usan AJAX, a menudo tengo la necesidad de ver el json que el servicio devuelve al navegador. Así que soltaré la URL de los datos JSON en la barra de direcciones.

Esto es bueno con ASPNET porque en caso de un error de codificación, puedo ver el diagnóstico de ASPNET en el navegador:

texto alternativo

Pero cuando el código del lado del servidor funciona correctamente y en realidad devuelve JSON, IE me pide que lo descargue, por lo que no puedo ver la respuesta.

texto alternativo

¿Puedo hacer que IE NO haga eso, en otras palabras, simplemente mostrarlo como si fuera texto sin formato?

Sé que podría hacer esto si configuro el encabezado Content-Type para que sea text/plain.

Pero este es específicamente el contexto de una aplicación ASPNET MVC, que establece la respuesta automáticamente cuando uso JsonResult en uno de mis métodos de acción. También quiero mantener el tipo de contenido apropiado, y no cambiarlo solo para apoyar los esfuerzos de depuración.

Cheeso
fuente
Firefox 3/4 también hace esto, si tiene una máquina que no ha sido actualizada.
Chris S
8
Me gusta el uso de "convencer" !!
adardesign

Respuestas:

234

Encontré la respuesta.

Puede configurar IE8 para mostrar application / json en la ventana del navegador actualizando el registro. No hay necesidad de una herramienta externa. No lo he probado ampliamente, pero funciona con IE8 en Vista.

Para usar esto, recuerde, se aplican todas las advertencias habituales sobre la actualización del registro. Deja de IE. Luego, corte y pegue lo siguiente en un archivo, con el nombre de 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

Luego haga doble clic en el archivo .reg. Reiniciar IE. El nuevo comportamiento que obtienes al hacer cosquillas en una URL que devuelve un documento con Content-Type: application/jsono Content-Type: text/jsones así:

texto alternativo

Qué hace, por qué funciona:

El 25336920-03F9-11cf-8FD0-00AA00686F13es el CLSID para la acción "Examinar en el lugar". Básicamente, esta entrada del registro le dice a IE que para los documentos que tienen un tipo mime de aplicación / json, solo véalo en su lugar. Esto no afectará a los documentos de aplicaciones / json descargados a través de <script>etiquetas o XHR, etc.

Las claves CLSID y codificación obtienen los mismos valores utilizados para image/gif, image/jpegy text/html.

Esta sugerencia proviene de este sitio y del artículo de Microsoft Manejo de tipos MIME en Internet Explorer .


En FF, tampoco necesita un complemento externo. Puedes usar el view-source:pseudo-protocolo. Ingrese una URL como esta en la barra de direcciones:

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

Este pseudo-protocolo solía ser compatible con IE, también, hasta WinXP-sp2, cuando Microsoft lo deshabilitó por razones de seguridad.

Cheeso
fuente
13
Si desea omitir la creación del archivo de registro, aquí hay una línea que puede pegar en una ventana de 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, no hay necesidad de preguntarle nada a la mayor parte del mundo. Mostrar JSON en el navegador es algo que un desarrollador de una página AJAX querría hacer. Es completamente innecesario mostrar JSON en el navegador para usuarios normales.
Cheeso
3
Cometí el error fatal de permitir que un amigo tome prestada mi caja y corrió esta solución. ¿Alguien sabe cuáles son las configuraciones originales para que pueda revertirlas?
KevDog
77
@Mosh, esto fue mencionado por nathanvda arriba, la solución no es para que los usuarios del sitio web puedan ver el JSON, es simplemente para propósitos de depuración. Lee la pregunta completa.
Anthony Shaw
2
Esto todavía funciona en IE11 en win 8.1. Ni siquiera necesité reiniciar el navegador. En mi caso necesitaba la text/jsonllave.
Chris
15

Tuve un problema similar. Estaba usando el jQuery "$. GetJSON" y todo funcionó perfectamente en Firefox y Chrome.

Pero no funcionó en IE. Así que intenté acceder directamente a la URL de json, pero en IE me preguntó si quería descargar el archivo.

Después de mucha búsqueda, vi que debe haber un encabezado en el resultado con un tipo de contenido, en mi caso, el tipo de contenido era:

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

Pero cuando la página que realizó la solicitud recibe este json, en IE, debe especificarse MISMO TIPO DE CONTENIDO, en mi caso fue:

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

abrazos

Fillipe Silva
fuente
Esto funcionó para mí, no es necesario jugar con el registro, simplemente cambie el encabezado de respuesta también "text / html".
64k
2
¿Cómo funciona esto en IE7 al hacer una llamada Ajax y recibir json como resultado? No estoy usando getJSON sino una llamada .ajax. He usado ese tipo de contenido en respuesta y encabezado y no ayuda en absoluto. Tampoco lo hizo usando json2.js. ¿Alguien tiene implementaciones exitosas de esto que funcionen en ie7? IE7 representa más del 30% de nuestros usuarios. Triste pero cierto, y un cambio de clave reg no es una opción. Decirle a un millón de usuarios del gobierno que solo ejecuten un hack de registro no funcionará.
CD Smith
Sé que esta es una pregunta antigua, pero se está repitiendo, así que aquí está la respuesta: la pregunta original se refiere a los DESARROLLADORES que están depurando la recuperación de JSON. Se sugiere modificar el registro como un paso para ayudar a esos desarrolladores. Modyfing el registro no se recomienda ni se sugiere para usuarios generales. Además: NUNCA es necesario que los usuarios habituales (= un millón de usuarios gubernamentales) vean JSON en el navegador.
Cheeso
Solo úsalo text/plain; charset=UTF-8. No es necesario enviar mensajes de texto / html.
perryflynn
13

Faltaba la solución anterior, y el código siguiente debería funcionar en cada situación:

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

Simplemente guarde el archivo json.reg y ejecútelo para modificar su registro.

Tomasz Maj
fuente
Mi computadora de trabajo está bloqueada. Si necesita una línea de comando, agréguelos, vea esta respuesta. stackoverflow.com/questions/13809856/… Gracias OP. Veo a json en IE ........ ¡yay!
granadaCoder
2

Si está de acuerdo con que IE abra el JSON en un bloc de notas, puede cambiar el programa predeterminado de su sistema para archivos .json a Bloc de notas.

Para hacer esto, cree o busque un archivo .json, haga clic con el botón derecho del mouse y seleccione "Abrir con" o "Elegir programa predeterminado".

Esto puede ser útil si por casualidad quiere usar Internet Explorer pero su compañía de TI no le permitirá editar su registro. De lo contrario, recomiendo las respuestas anteriores.

Porschiey
fuente
1

Uso Fiddler con el complemento JSONViewer para inspeccionar JSON. No creo que sea posible hacer que IE se comporte sin tocar el registro tal vez. Aquí hay alguna información.

Chetan S
fuente
1

Cambiar la configuración de tipo mime JSON de IE afectará la forma en que IE trata todas las respuestas JSON.

Cambiar el encabezado de tipo mime a text / html le dirá a cualquier navegador que la respuesta JSON que está devolviendo no es JSON sino texto sin formato.

Ninguna de las opciones es preferible.

En su lugar, querrá usar un complemento o herramienta como el Fiddler mencionado anteriormente o cualquier otro proxy de inspector de tráfico de red donde pueda elegir cada vez cómo procesar la respuesta JSON.

usuario1632922
fuente
2
text/htmlno le dice al navegador que la respuesta es texto plano, sino HTML. Si decides que quieres texto plano, úsalo text/plain. De lo contrario, puede terminar con algunas vulnerabilidades interesantes de XSS.
Michael Mior
0

FireFox + FireBug es muy bueno para este propósito. Para IE hay una barra de herramientas para desarrolladores que nunca he usado y que pretendo usar, por lo que no puedo proporcionar muchos comentarios.

Darin Dimitrov
fuente
Sí, sé sobre el complemento FF que permite la visualización de la aplicación / json como texto normal. Sin embargo, quiero saber específicamente sobre IE.
Cheeso
Hay una barra de herramientas para desarrolladores para IE. Por cierto, aquí hay una buena comparación de diferentes herramientas para desarrolladores: elegantcode.com/2009/05/18/…
Darin Dimitrov
0

Acabo de tener el mismo problema con un XMLHttpRequest. El sitio funciona perfectamente en Chrome y FF, y en docenas y docenas de navegadores Internet Explorer en producción. Esta UNA máquina (la que nuestra compañía está configurando para ser una máquina de demostración, por supuesto) decidió que iba a solicitar que se guardara la respuesta json a una solicitud ajax.

La solución de regedit aceptada a continuación lo arregló. Gracias.

Kintar
fuente
-1

Puede ver la respuesta en Fiddler: http://www.fiddler2.com/fiddler2/

¡Esa es una buena herramienta para tales cosas!

asgerhallas
fuente
Sé sobre Fiddler, pero parece excesivo para algo tan simple.
Cheeso