Як я можу переконати IE просто відображати додаток / json, а не пропонувати його завантажити?


161

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

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

alt текст

Але коли серверний код працює правильно і фактично повертає JSON, IE пропонує мені завантажити його, тому я не бачу відповіді.

alt текст

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

Я знаю, що міг би зробити це, якби встановити заголовок Content-Type text/plain.

Але це конкретно контекст програми ASPNET MVC, який автоматично встановлює відповідь, коли я використовую JsonResult на одному з моїх методів дії. Також я хотів би зберегти відповідний тип вмісту, а не змінювати його просто для підтримки налагодження.


Firefox 3/4 також робить це, якщо у вас є машина, яка не оновлювалася.
Кріс Ш

8
Мені подобається використання "переконати" !!
adardesign

Відповіді:


234

Я знайшов відповідь.

Ви можете налаштувати 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 текст

Що це робить, чому це працює:

25336920-03F9-11cf-8FD0-00AA00686F13Є CLSID для «Перегляд на місці» дії. В основному ця запис у реєстрі говорить IE, що для документів, які мають mime тип програми / json, просто перегляньте її на місці. Це не вплине на будь-які документи програми / json, завантажені через <script>теги, або через XHR тощо.

Клавіші CLSID і кодування отримують одні і ті ж значення , які використовуються для 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 його відключила з міркувань безпеки.


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
Jason R. Coombs,

2
@nathanvda, не потрібно нічого питати у найбільшої частини світу. Показ JSON у браузері - це те, що хотів би зробити розробник сторінки AJAX. Зовсім непотрібно відображати JSON у браузері для звичайних користувачів.
Cheeso

3
Я зробив фатальну помилку, що дозволив товаришеві позичити мені скриньку, і він запустив це виправлення. Хтось знає, що таке початкові налаштування, щоб я міг їх змінити?
KevDog

7
@Mosh, про це згадувала nathanvda вище, рішення не в тому, щоб користувачі веб-сайту могли переглядати JSON, це просто для налагодження. Прочитайте все запитання.
Ентоні Шоу

2
Це все ще працює в IE11 на виграш 8.1. Навіть не потрібно було перезавантажувати браузер. У моєму випадку мені знадобився text/jsonключ.
Кріс

15

У мене була подібна проблема. Я використовував jQuery "$. GetJSON", і все чудово працювало у Firefox та Chrome.

Але це не спрацювало в IE. Тому я спробував отримати прямий доступ до URL-адреси json, але в IE він запитав, чи хочу я завантажити файл.

Після багатого пошуку я побачив, що в результаті має бути заголовок із типом content, у моєму випадку тип content:

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".
64к

2
Як це працює в IE7 під час здійснення дзвінка Ajax і отримує json як результат? Я не використовую getJSON, а скоріше дзвінок .ajax. Я використовував цей тип вмісту у відповіді та заголовку, і він зовсім не допомагає. Не використовував json2.js. Хтось має успішні реалізації цього, що працює в ie7? IE7 представляє понад 30% наших користувачів. Сумно, але правда, і змінити ключ ключа не можна. Якщо сказати мільйонам урядових користувачів просто запустити рег-хак, не пролетить.
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/… Дякую ОП. Я бачу json в IE ........ так!
granadaCoder

2

Якщо вам все добре, просто IE відкриє JSON у блокнот, ви можете змінити програму за замовчуванням у вашій системі для файлів .json на Блокнот.

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

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


1

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


1

Зміна параметрів міми типу JSON IE вплине на те, як IE поводиться з усіма відповідями JSON.

Зміна заголовка типу mime на text / html ефективно скаже будь-якому браузеру, що відповідь JSON, яку ви повертаєте, - це не JSON, а звичайний текст.

Жоден варіант не є кращим.

Натомість ви хочете використовувати плагін або інструмент, як згаданий вище Fiddler або будь-який інший проксі-інспектор мережевого трафіку, де ви можете кожен раз обирати, як обробити відповідь JSON.


2
text/htmlне повідомляє веб-переглядачу, що відповідь - це звичайний текст, але HTML. Якщо ви вирішили хотіти звичайний текст, використовуйте text/plain. Інакше ви можете зіткнутися з деякими цікавими вразливими місцями XSS.
Майкл Міор

0

FireFox + FireBug дуже добре підходить для цієї мети. Для IE є панель інструментів для розробників, яку я ніколи не використовував і не збираюся використовувати, тому я не можу надати багато відгуків.


так, я знаю про плагін FF, який дозволяє відображати додаток / json як звичайний текст. Хоча я спеціально хочу знати про IE.
Cheeso

Існує панель інструментів для розробників IE. До речі, ось приємне порівняння різних інструментів для розробників: elegantcode.com/2009/05/18/…
Димитров

0

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

Прийняте рішення regedit нижче виправлено. Дякую.


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.