web-dev-qa-db-fra.com

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

Lors du débogage d'applications jQuery utilisant AJAX, j'ai souvent besoin de voir le json renvoyé par le service au navigateur. Je vais donc déposer l'URL des données JSON dans la barre d'adresse.

C'est bien avec ASPNET, car en cas d'erreur de codage, le diagostic ASPNET apparaît dans le navigateur:

alt text

Mais lorsque le code côté serveur fonctionne correctement et renvoie réellement JSON, IE m'invite à le télécharger, afin que je ne puisse pas voir la réponse.

alt text

Puis-je obtenir que IE ne le fasse PAS, en d'autres termes, l'affiche simplement comme s'il s'agissait de texte brut?

Je sais que je pourrais le faire si je règle l'en-tête Content-Type sur text/plain.

Mais il s'agit spécifiquement du contexte d'une application ASPNET MVC, qui définit la réponse automatiquement lorsque j'utilise JsonResult sur l'une de mes méthodes d'action. De plus, je souhaite conserver le type de contenu approprié et ne pas le modifier uniquement pour prendre en charge les efforts de débogage.

158
Cheeso

J'ai trouvé la réponse.

Vous pouvez configurer IE8 pour afficher application/json dans la fenêtre du navigateur en mettant à jour le registre. Il n'y a pas besoin d'un outil externe. Je n'ai pas testé cela largement, mais cela fonctionne avec IE8 sur Vista.

Pour utiliser cela, rappelez-vous que toutes les mises en garde habituelles concernant la mise à jour du registre s'appliquent. Arrêtez IE. Ensuite, coupez et collez le texte suivant dans un fichier, sous le nom 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

Double-cliquez ensuite sur le fichier .reg. Redémarrez IE. Le nouveau comportement que vous obtenez lorsque vous chatouillez une URL qui renvoie un document avec Content-Type: application/json ou Content-Type: text/json ressemble à ceci:

alt text

Qu'est-ce qu'il fait, pourquoi ça marche:

25336920-03F9-11cf-8FD0-00AA00686F13 est le CLSID de l'action "Parcourir en place". Fondamentalement, cette entrée de registre indique à IE que pour les documents ayant un type mime d'application/json, il suffit de le visualiser à la place. Cela n'affectera pas les documents d'application/json téléchargés via les balises <script>, ou via XHR, etc.

Les clés CLSID et Encoding ont les mêmes valeurs que celles utilisées pour image/gif, image/jpeg et text/html.

Cet indice provient de ce site , et de l'article de Microsoft Gestion des types MIME dans Internet Explorer .


En FF, vous n’avez pas non plus besoin d’un add-on externe. Vous pouvez simplement utiliser le pseudo-protocole view-source:. Entrez une URL comme celle-ci dans la barre d'adresse:

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

Auparavant, ce pseudo-protocole était pris en charge dans IE, jusqu'à WinXP-sp2, lorsque Microsoft le désactivait pour des raisons de sécurité.

227
Cheeso

J'avais un problème similaire. J'utilisais le jQuery "$. GetJSON" et tout fonctionnait parfaitement dans Firefox et Chrome.

Mais cela n'a pas fonctionné dans IE. J'ai donc essayé d'accéder directement à l'URL de json, mais dans IE, il m'a demandé si je voulais télécharger le fichier.

Après de nombreuses recherches, j'ai constaté qu'il devait y avoir un en-tête dans le résultat avec un type de contenu. Dans mon cas, le type de contenu était:

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

Mais quand la page qui a fait la demande reçoit ce json, dans IE, vous devez spécifier SAME CONTENT-TYPE, dans mon cas, c'était:

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

câlins

15
Fillipe Silva

La solution ci-dessus manquait, et le code ci-dessous devrait fonctionner dans toutes les situations:

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

Il suffit de sauvegarder le fichier json.reg et d’exécuter pour modifier votre registre.

12
Tomasz Maj

Si vous préférez que IE ouvre le fichier JSON dans un bloc-notes, vous pouvez modifier le programme par défaut de votre système pour les fichiers .json en Bloc-notes.

Pour ce faire, créez ou recherchez un fichier .json, cliquez avec le bouton droit de la souris et sélectionnez "Ouvrir avec" ou "Choisir le programme par défaut".

Cela peut s'avérer utile si vous souhaitez utiliser Internet Explorer par hasard, mais votre société informatique ne vous laissera pas modifier votre base de registre. Sinon, je recommande les réponses ci-dessus.

2
Porschiey

La modification des paramètres de type mime JSON d'IE affecte la manière dont IE traite tous les réponses JSON.

Changer l'en-tête de type mime en text/html indiquera à tout navigateur que la réponse JSON que vous renvoyez n'est pas JSON, mais du texte brut.

Aucune option n'est préférable.

Au lieu de cela, vous voudriez utiliser un plug-in ou un outil tel que le Fiddler mentionné ci-dessus ou tout autre proxy de l'inspecteur du trafic réseau où vous pouvez choisir à chaque fois comment traiter la réponse JSON.

1
user1632922

J'utilise Fiddler avec JSONViewer plugin pour inspecter JSON. Je ne pense pas qu'il soit possible de faire en sorte que IE se comporte sans manipuler le registre. Voici quelques informations.

1
Chetan Sastry

FireFox + FireBug est très bon pour cela. Pour IE, il y a un barre d'outils de développeur que je n'ai jamais utilisé et que je n'ai l'intention d'utiliser, de sorte que je ne peux pas fournir beaucoup de commentaires.

0
Darin Dimitrov

Je viens d'avoir le même problème avec un XMLHttpRequest. Le site fonctionne parfaitement dans Chrome et FF, ainsi que dans des dizaines de navigateurs Internet Explorer en production. Cette machine ONE (celle que notre société est en train de configurer pour être une machine de démonstration, bien sûr) a décidé d'aller sur Prompt pour enregistrer la réponse json à une demande ajax.

La solution regedit acceptée ci-dessous l'a corrigé. Merci.

0
Kintar