Как я могу убедить IE просто показать приложение / json, а не предлагать его скачать?

161

При отладке приложений jQuery, использующих AJAX, мне часто приходится видеть json, который сервис возвращает браузеру. Поэтому я добавлю URL-адрес для данных JSON в адресную строку.

Это хорошо с ASPNET, потому что в случае ошибки кодирования, я вижу диагноз ASPNET в браузере:

альтернативный текст

Но когда серверный код работает правильно и фактически возвращает JSON, IE предлагает мне загрузить его, поэтому я не вижу ответ.

альтернативный текст

Можно ли заставить IE НЕ делать этого, другими словами, просто отображать его так, как если бы он был простым текстом?

Я знаю, что мог бы сделать это, если бы я установил заголовок Content-Type text/plain.

Но это, в частности, контекст приложения ASPNET MVC, которое автоматически устанавливает ответ, когда я использую JsonResult для одного из моих методов действия. Также я хочу сохранить соответствующий тип контента, а не менять его только для поддержки отладки.

Cheeso
источник
Firefox 3/4 также делает это, если у вас есть машина, которая не была обновлена.
Крис С
8
Мне нравится использование "убедить"!
adardesign

Ответы:

234

Я нашел ответ.

Вы можете настроить IE8 для отображения application / json в окне браузера, обновив реестр. Там нет необходимости во внешнем инструменте. Я не тестировал это широко, но он работает с IE8 на Vista.

Чтобы использовать это, помните, все обычные предостережения об обновлении реестра применяются. Стоп 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, просто просмотрите его на месте. Это не повлияет на документы приложения / json, загруженные с помощью <script>тегов, XHR и т. Д.

Ключи CLSID и Encoding получают те же значения image/gif, что image/jpegи для , и text/html.

Эта подсказка появилась на этом сайте и в статье Microsoft « Обработка типов MIME в Internet Explorer» .


В FF вам также не нужно внешнее дополнение. Вы можете просто использовать view-source:псевдопротокол. Введите такой адрес в адресную строку:

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

Этот псевдопротокол раньше поддерживался в IE, вплоть до WinXP-sp2, когда Microsoft отключила его по соображениям безопасности.

Cheeso
источник
13
Если вы хотите пропустить создание файла реестра, вот одна строка, которую вы можете вставить в окно 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
Джейсон Р. Кумбс
2
@nathanvda, нет нужды спрашивать самую большую часть мира. Отображение JSON в браузере - это то, что разработчик AJAX-страницы захочет сделать. Для обычных пользователей совершенно необязательно отображать JSON в браузере.
Cheeso
3
Я сделал роковую ошибку, позволив другу одолжить мою коробку, и он выполнил это исправление. Кто-нибудь знает, каковы исходные настройки, чтобы я мог их отменить?
KevDog
7
@ Боже, об этом уже упоминал Натанвда, решение не в том, чтобы пользователи веб-сайта могли просматривать JSON, оно просто для целей отладки. Прочитайте весь вопрос.
Энтони Шоу
2
Это все еще работает в IE11 на win 8.1. Даже не нужно было перезагружать браузер. В моем случае мне нужен был text/jsonключ.
Крис
15

У меня была похожая проблема. Я использовал jQuery «$. GetJSON», и все отлично работало в Firefox и Chrome.

Но это не сработало в IE. Поэтому я попытался получить прямой доступ к URL-адресу json, но в IE он спросил, хочу ли я загрузить файл.

После долгих поисков я обнаружил, что в результате должен быть заголовок с типом контента, в моем случае тип контента был:

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

Но когда страница, которая сделала запрос, получает этот json, в IE вам нужно указать один и тот же тип содержимого, в моем случае:

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

объятий

Филипп Сильва
источник
Это сработало для меня, не нужно возиться с реестром, просто измените заголовок ответа тоже "text / html".
64k
2
Как это работает в IE7 при вызове Ajax и получении в результате json? Я не использую getJSON, а скорее вызов .ajax. Я использовал этот тип контента в ответе и заголовке, и это не помогает вообще. Ни один из них не использовал json2.js. У кого-нибудь есть успешные реализации этого, которые работают в ie7? IE7 представляет более 30% наших пользователей. Печально, но это правда, и смена ключа reg не вариант. Говорить миллиону правительственных пользователей о том, чтобы просто запустить рег хак, не получится.
CD Smith
Я знаю, что это старый вопрос, но он повторяется, поэтому вот ответ: оригинальный вопрос относится к РАЗРАБОТЧИКАМ, которые отлаживают извлечение JSON. Модификация reg предлагается в качестве шага, чтобы помочь этим разработчикам. Модификация реестра не рекомендуется и не рекомендуется для обычных пользователей. Кроме того: НИКОГДА не нужно постоянным пользователям (= миллиону государственных пользователей) просматривать 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/… Спасибо ОП. Я вижу JSON в IE ........ ууу!
granadaCoder
2

Если у вас все в порядке с тем, что IE открывает JSON в блокноте, вы можете изменить программу по умолчанию для файлов .json в вашей системе на Блокнот.

Для этого создайте или найдите файл .json, щелкните правой кнопкой мыши и выберите «Открыть с помощью» или «Выбрать программу по умолчанию».

Это может пригодиться, если вы случайно захотите использовать Internet Explorer, но ваша ИТ-компания не позволит вам редактировать реестр. В противном случае я рекомендую ответы выше.

Porschiey
источник
1

Я использую Fiddler с плагином JSONViewer для проверки JSON. Я не думаю, что возможно заставить IE вести себя без возни с реестром, возможно. Вот немного информации.

Четан С
источник
1

Изменение настроек MIME-типа в IE будет влиять на то, как IE обрабатывает все ответы JSON.

Изменение заголовка mime-type на text / html фактически сообщит любому браузеру, что возвращаемый вами ответ JSON - это не JSON, а обычный текст.

Ни один из вариантов не является предпочтительным.

Вместо этого вы захотите использовать плагин или инструмент, такой как вышеупомянутый Fiddler, или любой другой прокси-сервер инспектора сетевого трафика, где вы можете каждый раз выбирать, как обрабатывать ответ JSON.

user1632922
источник
2
text/htmlне говорит браузеру, что ответом является простой текст, но HTML. Если вы решили, что хотите простой текст, используйте text/plain. В противном случае вы можете столкнуться с некоторыми интересными уязвимостями XSS.
Майкл Миор
0

FireFox + FireBug очень хорош для этой цели. Для IE есть панель инструментов разработчика, которую я никогда не использовал и не собираюсь использовать, поэтому я не могу дать много отзывов.

Дарин димитров
источник
да, я знаю о плагине FF, который позволяет отображать application / json как обычный текст. Я специально хочу знать об IE, хотя.
Cheeso
Там есть панель инструментов разработчика для IE. Кстати, вот хорошее сравнение различных инструментов для разработчиков: элегантный код.com/2009/05/18/…
Дарин Димитров
0

У меня была такая же проблема с XMLHttpRequest. Сайт работает безупречно в Chrome и FF, а также в десятках и десятках браузеров Internet Explorer. Этот ОДИН компьютер (который наша компания настраивает на демонстрацию), конечно, решил, что собирается запросить сохранение ответа json на запрос ajax.

Принятое решение regedit ниже исправило это. Спасибо.

Kintar
источник
-1

Вы можете увидеть ответ в Fiddler: http://www.fiddler2.com/fiddler2/

Это хороший инструмент для таких вещей!

asgerhallas
источник
Я знаю о Фиддлере, но это кажется излишним для чего-то такого простого.
Cheeso