Como convencer o IE a exibir simplesmente application / json em vez de oferecer o download?

161

Ao depurar aplicativos jQuery que usam AJAX, geralmente tenho a necessidade de ver o json que está sendo retornado pelo serviço ao navegador. Então, vou largar a URL dos dados JSON na barra de endereço.

Isso é bom com o ASPNET, porque, no caso de um erro de codificação, posso ver o diagostic do ASPNET no navegador:

texto alternativo

Mas quando o código do lado do servidor funciona corretamente e retorna JSON, o IE solicita que eu faça o download, para que não consiga ver a resposta.

texto alternativo

Posso fazer o IE NÃO fazer isso, em outras palavras, apenas exibi-lo como se fosse texto simples?

Eu sei que eu poderia fazer isso se eu definir o cabeçalho Content-Type como text/plain.

Mas esse é especificamente o contexto de um aplicativo ASPNET MVC, que define a resposta automaticamente quando eu uso o JsonResult em um dos meus métodos de ação. Também quero manter o tipo de conteúdo apropriado, e não alterá-lo apenas para apoiar os esforços de depuração.

Cheeso
fonte
O Firefox 3/4 também faz isso, se você tiver uma máquina que não foi atualizada.
Chris S
8
Eu gosto do uso de "convencer" !!
adardesign 27/02

Respostas:

234

Eu encontrei a resposta.

Você pode configurar o IE8 para exibir application / json na janela do navegador, atualizando o registro. Não há necessidade de uma ferramenta externa. Não testei isso amplamente, mas funciona com o IE8 no Vista.

Para usar isso, lembre-se de que todas as advertências usuais sobre a atualização do registro se aplicam. Pare o IE. Em seguida, recorte e cole o seguinte em um arquivo, com o nome 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

Em seguida, clique duas vezes no arquivo .reg. Reinicie o IE. O novo comportamento que você obtém ao marcar uma URL que retorna um documento com Content-Type: application/jsonou Content-Type: text/jsoné assim:

texto alternativo

O que faz, por que funciona:

O 25336920-03F9-11cf-8FD0-00AA00686F13é o CLSID da ação "Procurar no local". Basicamente, esta entrada do registro informa ao IE que, para documentos que possuem um tipo mime de application / json, apenas visualize-o no local. Isso não afetará nenhum documento application / json baixado via <script>tags ou via XHR e assim por diante.

As chaves CLSID e Codificação obter os mesmos valores usados para image/gif, image/jpege text/html.

Esta dica veio deste site e do artigo da Microsoft Manipulando tipos MIME no Internet Explorer .


No FF, você também não precisa de um complemento externo. Você pode apenas usar o view-source:pseudo-protocolo. Digite um URL como este na barra de endereço:

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

Esse pseudo-protocolo costumava ser suportado no IE, até o WinXP-sp2, quando a Microsoft o desativava por motivos de segurança.

Cheeso
fonte
13
Se você quiser pular a criação do arquivo de registro, aqui está uma frase que você pode colar em uma janela do 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, não há necessidade de perguntar nada à maior parte do mundo. Mostrar JSON no navegador é algo que um desenvolvedor de uma página AJAX gostaria de fazer. É completamente desnecessário exibir JSON no navegador para usuários regulares.
Cheeso
3
Cometi o erro fatal de permitir que um amigo emprestasse minha caixa e ele executou essa correção. Alguém sabe quais são as configurações originais para que eu possa revertê-las?
KevDog
7
@Mosh, isso foi mencionado por nathanvda acima, a solução não é para que os usuários do site possam visualizar o JSON, é simplesmente para fins de depuração. Leia a pergunta inteira.
Anthony Shaw
2
Isso ainda está funcionando no IE11 na vitória 8.1. Nem precisava reiniciar o navegador. No meu caso, eu precisava da text/jsonchave.
077
15

Eu tive um problema parecido. Eu estava usando o jQuery "$. GetJSON" e tudo funcionou perfeitamente no Firefox e Chrome.

Mas não funcionou no IE. Então, tentei acessar diretamente a URL do json, mas no IE perguntou se eu queria baixar o arquivo.

Depois de muita pesquisa, vi que deve haver um cabeçalho no resultado com um tipo de conteúdo, no meu caso, o tipo de conteúdo era:

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

Mas quando a página que fez a solicitação recebe esse json, no IE, você deve ser especificado MESMO CONTEÚDO-TIPO, no meu caso era:

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

abraços

Fillipe Silva
fonte
Isso funcionou para mim, sem mexer no registro necessário, basta alterar o cabeçalho da resposta também "text / html".
64
2
Como isso funciona no IE7 ao fazer uma chamada Ajax e recebe o json como resultado? Não estou usando getJSON, mas uma chamada .ajax. Eu usei esse tipo de conteúdo na resposta e no cabeçalho e ele não ajuda em nada. Nem o uso do json2.js. Alguém tem implementações bem sucedidas disso que funcionam no ie7? O IE7 representa mais de 30% de nossos usuários. Triste, mas verdadeiro, e uma alteração na chave de registro não é uma opção. Dizer a um milhão de usuários do governo que apenas executam um hack de registro não voará.
cd smith.
Sei que essa é uma pergunta antiga, mas está sendo repetida, então aqui está a resposta: A pergunta original se refere aos DESENVOLVEDORES que estão depurando a recuperação do JSON. A modificação do registro é sugerida como uma etapa para ajudar esses desenvolvedores. Modificar o registro não é recomendado ou sugerido para usuários gerais. Além disso: NUNCA é necessário que usuários comuns (= um milhão de usuários do governo) visualizem o JSON no navegador.
Cheeso
Apenas use text/plain; charset=UTF-8. Não há necessidade de texto / html.
perryflynn
13

Faltava a solução acima, e o código abaixo deveria funcionar em todas as situações:

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

Apenas salve o arquivo json.reg e execute para modificar seu registro.

Tomasz Maj
fonte
Meu computador do trabalho está bloqueado. Se você precisar adicionar uma linha de comando, consulte esta resposta. stackoverflow.com/questions/13809856/… Obrigado OP. Vejo json no IE ........ yay!
precisa saber é o seguinte
2

Se você concorda apenas em ter o IE aberto o JSON em um bloco de notas, você pode alterar o programa padrão do sistema para arquivos .json para o Bloco de Notas.

Para fazer isso, crie ou localize um arquivo .json, clique com o botão direito do mouse e selecione "Abrir com" ou "Escolha o programa padrão".

Isso pode ser útil se você por acaso desejar usar o Internet Explorer, mas sua empresa de TI não permitirá que você edite seu registro. Caso contrário, eu recomendo as respostas acima.

Porschiey
fonte
1

Eu uso o Fiddler com o plugin JSONViewer para inspecionar o JSON. Eu não acho que seja possível fazer o IE se comportar sem mexer no registro, talvez. Aqui estão algumas informações.

Chetan S
fonte
1

Alterar as configurações do tipo mime JSON do IE afetará a maneira como o IE trata todas as respostas JSON.

Alterar o cabeçalho do tipo MIME para text / html informará efetivamente a qualquer navegador que a resposta JSON que você está retornando não é JSON, mas texto simples.

Nenhuma das opções é preferível.

Em vez disso, convém usar um plug-in ou ferramenta como o Fiddler mencionado acima ou qualquer outro proxy do inspetor de tráfego de rede, onde você pode escolher sempre como processar a resposta JSON.

user1632922
fonte
2
text/htmlnão informa ao navegador que a resposta é texto sem formatação, mas HTML. Se você decidir que deseja texto simples, use text/plain. Caso contrário, você pode acabar com algumas vulnerabilidades XSS interessantes.
Michael Mior 19/06/2013
0

O FireFox + FireBug é muito bom para esse fim. Para o IE, há uma barra de ferramentas do desenvolvedor que eu nunca usei e pretendo usar, portanto não posso fornecer muito feedback.

Darin Dimitrov
fonte
Sim, eu sei sobre o plugin FF que permite a exibição de application / json como texto regular. Eu quero saber especificamente sobre o IE, no entanto.
Cheeso
Há uma barra de ferramentas do desenvolvedor para o IE. A propósito, aqui está uma boa comparação de diferentes ferramentas para desenvolvedores: elegantcode.com/2009/05/18/…
Darin Dimitrov
0

Eu apenas tive o mesmo problema com um XMLHttpRequest. O site funciona perfeitamente no Chrome e no FF e em dezenas e dezenas de navegadores Internet Explorer em produção. Essa máquina ONE (a que nossa empresa está configurando para ser uma máquina de demonstração, é claro) decidiu que solicitaria salvar a resposta json a uma solicitação de ajax.

A solução de regedit aceita abaixo a corrigiu. Obrigado.

Kintar
fonte
-1

Você pode ver a resposta no Fiddler: http://www.fiddler2.com/fiddler2/

Essa é uma boa ferramenta para essas coisas!

asgerhallas
fonte
Eu sei sobre o Fiddler, mas parece um exagero para algo tão simples.
Cheeso