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

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

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

alt text

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

alt text

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

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

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

Ответы [ 9 ]

225 голосов
/ 22 марта 2010

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

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

alt text

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

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

15 голосов
/ 02 марта 2012

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

обнимает

12 голосов
/ 07 апреля 2014

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

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 и запустите для изменения реестра.

2 голосов
/ 09 октября 2013

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

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

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

1 голос
/ 29 августа 2012

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

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

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

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

1 голос
/ 20 марта 2010

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

0 голосов
/ 02 февраля 2015

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

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

0 голосов
/ 20 марта 2010

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

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

0 голосов
/ 20 марта 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...