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

161

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

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

Изображение 254

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

Изображение 255

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

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

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

  • 0
    Firefox 3/4 также делает это, если у вас есть машина, которая не была обновлена.
  • 7
    Мне нравится использование "убедить"!
Теги:
asp.net-mvc
internet-explorer
asp.net-ajax

9 ответов

207
Лучший ответ

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

Вы можете настроить IE8 на отображение приложения /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, выглядит следующим образом:

Изображение 3596

Что он делает, почему он работает:

25336920-03F9-11cf-8FD0-00AA00686F13 - это CLSID для действия "Browse in place". В основном эта запись в реестре сообщает IE, что для документов, которые имеют тип mime application/json, просто просмотрите его на месте. Это не повлияет на любые документы приложения /json, загруженные с помощью тегов <script> или через XHR, и так далее.

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

Этот намек получен из этого сайта и из статьи Microsoft Обработка MIME Типы в Internet Explorer.


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

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

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

  • 27
    +1 за отсутствие ответа. Мне нравится.
  • 0
    Это также работает в IE7.
Показать ещё 17 комментариев
15

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

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

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

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) {

обнимает

  • 0
    Это сработало для меня, не нужно возиться с реестром, просто измените заголовок ответа тоже "text / html".
  • 2
    Как это работает в IE7 при вызове Ajax и получении в результате json? Я не использую getJSON, а скорее вызов .ajax. Я использовал этот тип контента в ответе и заголовке, и это не помогает вообще. Ни один из них не использовал json2.js. У кого-нибудь есть успешные реализации этого, которые работают в ie7? IE7 представляет более 30% наших пользователей. Печально, но это правда, и смена ключа reg не вариант. Говорить миллиону правительственных пользователей о том, чтобы просто запустить хак, не получится.
Показать ещё 2 комментария
12

Выше решения не хватало, а ниже код должен работать в любой ситуации:

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 и запустите, чтобы изменить свой реестр.

  • 0
    Мой рабочий компьютер заблокирован. Если вам нужно в командной строке добавить их, посмотрите этот ответ. stackoverflow.com/questions/13809856/… Спасибо ОП. Я вижу JSON в IE ........ ууу!
2

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

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

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

1

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

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

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

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

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

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

0

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

Принятое решение regedit ниже зафиксировано. Спасибо.

0

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

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

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

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню