IE가 응용 프로그램 / json을 다운로드하지 않고 단순히 표시하도록 어떻게 확신 할 수 있습니까?


161

AJAX를 사용하는 jQuery 앱을 디버깅하는 동안 종종 서비스에서 브라우저로 반환되는 json을 볼 필요가 있습니다. 따라서 JSON 데이터의 URL을 주소 표시 줄에 드롭합니다.

이것은 코딩 오류가 발생하면 브라우저에서 ASPNET 진단을 볼 수 있기 때문에 ASPNET에 좋습니다.

대체 텍스트

그러나 서버 측 코드가 올바르게 작동하고 실제로 JSON을 반환하면 IE에서 다운로드하라는 메시지를 표시하므로 응답을 볼 수 없습니다.

대체 텍스트

즉, IE를 일반 텍스트처럼 표시하지 않도록 할 수 있습니까?

Content-Type 헤더를로 설정하면이 작업을 수행 할 수 있습니다 text/plain.

그러나 이것은 특히 ASPNET MVC 응용 프로그램의 컨텍스트이며, 내 작업 방법 중 하나에서 JsonResult를 사용할 때 자동으로 응답을 설정합니다. 또한 적절한 콘텐츠 유형을 유지하고 디버깅 노력을 지원하기 위해 변경하지 않습니다.


업데이트되지 않은 시스템이있는 경우 Firefox 3/4에서도이 작업을 수행합니다.
Chris S

8
나는 "설득"의 사용법을 좋아한다 !!
adardesign

답변:


234

답을 찾았습니다.

레지스트리를 업데이트하여 브라우저 창에 application / json을 표시하도록 IE8을 구성 할 수 있습니다. 외부 도구가 필요하지 않습니다. 나는 이것을 광범위하게 테스트하지는 않았지만 Vista의 IE8에서 작동합니다.

이를 사용하려면 레지스트리 업데이트에 대한 모든 일반적인 경고 사항이 적용됩니다. IE를 중지하십시오. 그런 다음의 이름으로 다음을 잘라 파일에 붙여 넣습니다 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

그런 다음 .reg 파일을 두 번 클릭하십시오. IE를 다시 시작하십시오. 와 문서를 반환하는 URL 간질 때 얻는 새로운 동작 Content-Type: application/json또는 Content-Type: text/json다음과 같이이다 :

대체 텍스트

그것이하는 일, 왜 작동 하는가 :

25336920-03F9-11cf-8FD0-00AA00686F13"찾아보기 장소에"동작에 대한 CLSID입니다. 기본적 으로이 레지스트리 항목은 IE에 mime 유형의 응용 프로그램 / json이있는 문서의 경우 해당 위치를 봅니다. <script>태그 나 XHR 등을 통해 다운로드 한 응용 프로그램 / json 문서에는 영향을 미치지 않습니다 .

CLSID 및 인코딩 키에 사용 된 것과 같은 값을 가져 image/gif, image/jpeg하고 text/html.

이 힌트는 이 사이트Internet Explorer 에서 Microsoft의 MIME 유형 처리 기사 에서 발췌 한 것 입니다.


FF에서는 외부 애드온도 필요하지 않습니다. view-source:의사 프로토콜 만 사용할 수 있습니다 . 주소 표시 줄에 다음과 같은 URL을 입력하십시오.

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

이 의사 프로토콜은 Microsoft가 보안상의 이유로 사용하지 않을 때 WinXP-sp2까지 IE에서도 지원되었습니다.


13
레지스트리 파일 만들기를 건너 뛰려면 다음과 같이 파워 쉘 창에 붙여 넣을 수있는 한 줄짜리가 있습니다.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, 세계의 가장 큰 부분을 요구할 필요가 없습니다. 브라우저에 JSON을 표시하는 것은 AJAX 페이지 개발자가 원하는 것입니다. 일반 사용자를 위해 브라우저에 JSON을 표시 할 필요는 없습니다.
Cheeso

3
나는 친구가 내 상자를 빌릴 수있게하는 치명적인 실수를 저질렀다. 누구든지 원래 설정이 무엇인지 알고 내가 되돌릴 수 있습니까?
KevDog

7
@ Mosh, 위에서 언급 한 nathanvda는 웹 사이트 사용자가 JSON을 볼 수 있도록 솔루션을 제공하지는 않습니다. 단순히 디버깅 목적입니다. 전체 질문을 읽으십시오.
Anthony Shaw

2
이것은 여전히 ​​승리 8.1의 IE11에서 작동합니다. 브라우저를 다시 시작할 필요조차 없었습니다. 제 경우에는 text/json열쇠가 필요했습니다 .
Chris

15

나는 비슷한 문제가 있었다. "$. GetJSON"jQuery를 사용하고 있으며 Firefox 및 Chrome에서 모든 것이 완벽하게 작동했습니다.

그러나 IE에서는 작동하지 않았습니다. 그래서 json의 URL에 직접 액세스하려고 시도했지만 IE에서는 파일을 다운로드 할 것인지 물었습니다.

많은 검색을 한 결과 content-type의 결과에 헤더가 있어야한다는 것을 알았습니다. 필자의 경우 content-type은 다음과 같습니다.

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

그러나 요청을 한 페이지 가이 json을 받으면 IE에서 다음과 같이 SAME CONTENT-TYPE을 지정해야합니다.

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

포옹


이것은 레지스트리를 엉망으로 만들 필요없이 응답 헤더를 "text / html"로 변경하면됩니다.
64k

2
Ajax 호출을 할 때 IE7에서 어떻게 작동하고 결과적으로 json을 수신합니까? getJSON을 사용하지 않고 .ajax 호출을 사용하고 있습니다. 응답과 헤더에 해당 내용 유형을 사용했지만 전혀 도움이되지 않습니다. json2.js도 사용하지 않았습니다. 누구든지 ie7에서 작동하는 이것을 성공적으로 구현 했습니까? IE7은 사용자의 30 % 이상을 차지합니다. 슬프지만 사실이며 reg 키 변경은 옵션이 아닙니다. 백만 명의 관리 사용자에게 reg hack을 실행하라고 말하는 것은 날아 가지 않습니다.
CD Smith

나는 이것이 오래된 질문이라는 것을 알고 있지만 반복되고 있습니다. 정답은 다음과 같습니다. 원래 질문은 JSON 검색을 디버깅하는 개발자와 관련이 있습니다. 등록자를 수정하는 것이 해당 개발자를 돕기위한 단계로 제안됩니다. 일반 사용자에게는 레지스트리 수정을 권장하거나 권장하지 않습니다. 또한 : 일반 사용자 (= 백만 명의 정부 사용자)가 브라우저에서 JSON을 볼 필요가 없습니다.
Cheeso

그냥 사용하십시오 text/plain; charset=UTF-8. 문자 / HTML 필요가 없습니다.
perryflynn

13

위의 해결책은 누락되었으며 모든 상황에서 아래 코드가 작동해야합니다.

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

파일 json.reg를 저장하고 레지스트리를 수정하기 위해 실행하십시오.


업무용 컴퓨터가 잠겨 있습니다. 커맨드 라인을 추가 해야하는 경우이 답변을 참조하십시오. stackoverflow.com/questions/13809856/… 감사합니다. 나는 IE에서 json을 본다 ........ yay!
granadaCoder

2

IE에서 메모장으로 JSON을 열면 .json 파일의 시스템 기본 프로그램을 메모장으로 변경할 수 있습니다.

이렇게하려면 .json 파일을 만들거나 마우스 오른쪽 단추로 클릭하고 "연결 프로그램"또는 "기본 프로그램 선택"을 선택하십시오.

Internet Explorer를 사용하고 싶지만 IT 회사에서 레지스트리를 편집 할 수없는 경우이 방법이 유용 할 수 있습니다. 그렇지 않으면 위의 답변을 권장합니다.


1

JSON을 검사하기 위해 FiddlerJSONViewer 플러그인 과 함께 사용 합니다. 레지스트리를 다루지 않고 IE를 작동시킬 수 있다고 생각하지 않습니다. 여기 몇 가지 정보.


1

IE의 JSON MIME 유형 설정을 변경하면 IE가 모든 JSON 응답을 처리하는 방식에 영향을줍니다 .

MIME 유형 헤더를 text / html로 변경하면 반환하는 JSON 응답이 JSON이 아니라 일반 텍스트임을 브라우저에 효과적으로 알릴 수 있습니다.

두 옵션 모두 바람직하지 않습니다.

대신 위에서 언급 한 Fiddler 또는 다른 네트워크 트래픽 관리자 프록시와 같은 플러그인 또는 도구를 사용하여 JSON 응답을 처리하는 방법을 선택할 때마다 선택할 수 있습니다.


2
text/html응답에 일반 텍스트가 아니라 HTML이라고 브라우저에 지시하지 않습니다. 일반 텍스트를 원한다면을 사용하십시오 text/plain. 그렇지 않으면 몇 가지 흥미로운 XSS 취약점이 생길 수 있습니다.
Michael Mior 2016 년

0

FireFox + FireBug는이 목적에 매우 적합합니다. IE에는 내가 사용해 본 적이 없으며 사용하려는 개발자 툴바 가 있으므로 많은 피드백을 제공 할 수 없습니다.


그렇습니다. 응용 프로그램 / json을 일반 텍스트로 표시 할 수있는 FF 플러그인에 대해 알고 있습니다. 그래도 IE에 대해 알고 싶습니다.
Cheeso

IE 용 개발자 툴바가 있습니다. 그건 그렇고 여기에 개발자를위한 다른 도구의 멋진 비교가 있습니다 : elegantcode.com/2009/05/18/…
Darin Dimitrov

0

XMLHttpRequest와 동일한 문제가 발생했습니다. 이 사이트는 Chrome 및 FF에서 완벽하게 작동하며 프로덕션 환경에서 수십 개의 Internet Explorer 브라우저에서 작동합니다. 이 ONE 머신 (당사에서 데모 머신으로 설정 한 머신)은 json 응답을 ajax 요청에 저장하라는 프롬프트를 표시하기로 결정했습니다.

아래의 승인 된 regedit 솔루션이 수정했습니다. 감사.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.