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

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

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

alt text

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

alt text

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

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

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

Ответ 1

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

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

alt text

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

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 отключила его по соображениям безопасности.

Ответ 2

У меня была аналогичная проблема. Я использовал 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) {

обнимает

Ответ 3

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

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

Ответ 4

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

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

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

Ответ 5

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

Ответ 6

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

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

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

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

Ответ 7

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

Ответ 8

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

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

Ответ 9

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

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