161 votes

Comment puis-je convaincre IE pour simplement afficher application/json plutôt que de proposer de le télécharger ?

Lors du débogage jQuery applications qui utilisent AJAX, j'ai souvent le besoin de voir le json qui est retourné par le service du navigateur. Donc, je vais déposer l'URL pour les données JSON dans la barre d'adresse.

C'est sympa avec le RÉSEAU parce que dans le cas d'une erreur de codage, je Peux voir le ASPNET diagostic dans le navigateur:

alt text

Mais lorsque le code côté serveur fonctionne correctement et renvoie en fait JSON, c'est à dire m'invite à le télécharger, donc je ne vois pas la réponse.

alt text

Puis-je obtenir IE de ne PAS le faire, en d'autres termes, tout simplement de l'afficher comme si elle était en texte brut?

Je sais que je pourrais le faire si j'ai mis le header Content-Type pour être text/plain.

Mais c'est précisément le contexte d'une ASPNET MVC app, qui définit la réponse automatiquement lorsque j'utilise JsonResult sur l'un de mes méthodes d'action. Aussi j'ai un peu envie de garder le content-type approprié, et de ne pas changer juste pour soutenir les efforts de débogage.

232voto

Cheeso Points 87022

J'ai trouvé la réponse.

Vous pouvez configurer IE8 pour afficher l'application/json dans la fenêtre du navigateur par la mise à jour de la base de registre. Il n'y a pas besoin d'un outil externe. Je n'ai pas testé cette large, mais il fonctionne avec IE8 sous Vista.

Pour l'utiliser, n'oubliez pas, toutes les mises en garde habituelles sur la mise à jour du registre s'appliquent. Arrêter IE. Ensuite, couper et coller le texte suivant dans un fichier, par le nom de l' 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

Puis double-cliquez sur le .le fichier reg. Redémarrer IE. Le nouveau comportement que vous obtenez lorsque le chatouillement d'une URL qui renvoie une doc avec Content-Type: application/json ou Content-Type: text/json est comme ceci:

alt text

Ce qu'il fait, pourquoi il fonctionne:

L' 25336920-03F9-11cf-8FD0-00AA00686F13 est le CLSID du "Parcourir en place" d'action. Fondamentalement, cette entrée de registre est de dire c'est à dire que pour les docs qui ont le type mime application/json, il suffit de visualiser en place. Ce qui n'affecte pas toute application/json documents téléchargés via <script> tags, ou via XHR, et ainsi de suite.

Le CLSID et des clés de chiffrement obtenir les mêmes valeurs utilisées pour image/gif, image/jpeg, et text/html.

Ce soupçon est venu à partir de ce site, et à partir de Microsoft à l'article de la Manipulation des Types MIME dans Internet Explorer .


Dans FF, vous n'avez pas besoin d'un add-on. Vous pouvez simplement utiliser l' view-source: pseudo-protocole. Entrez une URL comme ceci dans la barre d'adresse:

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

Cette pseudo-protocole utilisé pour être pris en charge dans IE, aussi, jusqu'à ce que WinXP sp2, lorsque Microsoft a désactivé ou des raisons de sécurité.

15voto

Fillipe Silva Points 111

J'ai eu un problème similaire. J'ai été en utilisant le "$. GetJSON" jQuery et tout fonctionnait parfaitement sous Firefox et Chrome.

Mais il ne fonctionne pas sous IE. J'ai donc essayé d'accéder directement à l'URL de json, mais sous IE, il a demandé si je voulais télécharger le fichier.

Après beaucoup de recherches j'ai vu qu'il doit y avoir un en-tête dans le résultat avec un type de contenu, dans mon cas, le contenu de type a:

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

Mais lorsque la page qui en fait la demande reçoit ce json, c'est à dire, vous devez être spécifiés MÊME TYPE de CONTENU, dans mon cas était:

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

câlins

12voto

Tomasz Maj Points 483

Au-dessus de solution manquait la chose et ci-dessous le code devrait fonctionner dans toutes les situations :

Juste Enregistrer fichier json.reg et courez pour modifier votre registre.

1voto

Chetan Sastry Points 14742

J’ai utiliser Fiddler avec le plugin JSONViewer pour inspecter JSON. Je ne pense pas que c’est possible de faire IE comportement sans jongler avec registre peut-être. Voici quelques informations.

-1voto

asgerhallas Points 5134

Vous avez pu voir la réponse dans un violon : http://www.fiddler2.com/fiddler2/

C’est un outil intéressant pour de telles choses !

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X