Jak przekonać IE, aby po prostu wyświetlał aplikację / json zamiast oferować jej pobranie?


161

Podczas debugowania aplikacji jQuery, które używają AJAX, często mam potrzebę zobaczenia json, który jest zwracany przez usługę do przeglądarki. Więc upuszczę adres URL danych JSON na pasku adresu.

Z ASPNETem to fajnie, bo w przypadku błędu kodowania widzę diagostykę ASPNET w przeglądarce:

tekst alternatywny

Ale kiedy kod po stronie serwera działa poprawnie i faktycznie zwraca JSON, IE prosi mnie o pobranie, więc nie widzę odpowiedzi.

tekst alternatywny

Czy mogę sprawić, aby IE tego NIE robił, innymi słowy, aby wyświetlał go tak, jakby był zwykłym tekstem?

Wiem, że mógłbym to zrobić, jeśli ustawię nagłówek Content-Type na text/plain.

Ale jest to konkretnie kontekst aplikacji ASPNET MVC, która automagicznie ustawia odpowiedź, gdy używam JsonResult w jednej z moich metod akcji. Chciałbym również zachować odpowiedni typ zawartości i nie zmieniać go tylko po to, aby wspierać debugowanie.


Firefox 3/4 również to robi, jeśli masz komputer, który nie został zaktualizowany.
Chris S,

8
Podoba mi się użycie słowa „przekonać” !!
adardesign

Odpowiedzi:


234

Znalazłem odpowiedź.

Aktualizując rejestr, można skonfigurować IE8 do wyświetlania aplikacji / json w oknie przeglądarki. Nie ma potrzeby korzystania z zewnętrznego narzędzia. Nie testowałem tego ogólnie, ale działa z IE8 na Vista.

Aby z tego skorzystać, pamiętaj, że mają zastosowanie wszystkie zwykłe zastrzeżenia dotyczące aktualizacji rejestru. Zatrzymaj IE. Następnie wytnij i wklej następujące elementy do pliku o nazwie 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

Następnie kliknij dwukrotnie plik .reg. Uruchom ponownie IE. Nowe zachowanie, które pojawia się podczas łaskotania adresu URL, który zwraca dokument z Content-Type: application/jsonlub Content-Type: text/jsonjest takie:

tekst alternatywny

Co to robi, dlaczego to działa:

Jest 25336920-03F9-11cf-8FD0-00AA00686F13to identyfikator CLSID dla akcji „Przeglądaj w miejscu”. Zasadniczo ten wpis rejestru mówi IE, że w przypadku dokumentów, które mają typ MIME aplikacji / json, po prostu wyświetl go na miejscu. Nie wpłynie to na żadne dokumenty aplikacji / json pobrane za pomocą <script>tagów lub przez XHR i tak dalej.

Klucze CLSID i kodowanie dostać te same wartości używane do image/gif, image/jpeg, i text/html.

Ta wskazówka pochodzi z tej strony oraz z artykułu Microsoftu Handling MIME Types in Internet Explorer .


W FF nie potrzebujesz też zewnętrznego dodatku. Możesz po prostu użyć view-source:pseudo-protokołu. Wprowadź adres URL podobny do tego w pasku adresu:

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

Ten pseudo-protokół był obsługiwany w IE, także do czasu WinXP-sp2, kiedy Microsoft wyłączył go ze względów bezpieczeństwa.


13
Jeśli chcesz pominąć tworzenie pliku rejestru, oto jedna linijka, którą możesz wkleić do okna 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, nie ma potrzeby pytać o nic największej części świata. Wyświetlanie JSON w przeglądarce jest czymś, co chciałby zrobić programista strony AJAX. Dla zwykłych użytkowników zupełnie niepotrzebne jest wyświetlanie JSON w przeglądarce.
Cheeso

3
Popełniłem fatalny błąd, pozwalając przyjacielowi pożyczyć moje pudełko, a on uruchomił tę poprawkę. Czy ktoś wie jakie są oryginalne ustawienia, żebym mógł je odwrócić?
KevDog,

7
@Mosh, wspomniał o tym nathanvda powyżej, rozwiązanie nie polega na tym, że użytkownicy witryny mogą przeglądać JSON, ale po prostu w celu debugowania. Przeczytaj całe pytanie.
Anthony Shaw

2
To nadal działa w IE11 na win 8.1. Nie trzeba nawet uruchamiać ponownie przeglądarki. W moim przypadku potrzebowałem text/jsonklucza.
Chris,

15

Miałem podobny problem. Używałem jQuery "$. GetJSON" i wszystko działało idealnie w Firefoksie i Chrome.

Ale to nie działało w IE. Próbowałem więc bezpośrednio uzyskać dostęp do adresu URL json, ale w IE zapytałem, czy chcę pobrać plik.

Po długich poszukiwaniach zauważyłem, że w wyniku musi znajdować się nagłówek z typem treści, w moim przypadku typem treści był:

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

Ale kiedy strona, która wysłała żądanie, otrzyma ten plik json, w IE, musisz określić TEN SAM RODZAJ TREŚCI, w moim przypadku:

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

uściski


To zadziałało dla mnie, nie ma potrzeby mieszania się w rejestrze, po prostu zmień również nagłówek odpowiedzi na „tekst / html”.
64 tys.

2
Jak to działa w IE7 podczas wykonywania wywołania Ajax i otrzymywania w rezultacie json? Nie używam getJSON, ale raczej wywołanie .ajax. Użyłem tego typu treści w odpowiedzi i nagłówku i to wcale nie pomaga. Ani też nie korzystałem z json2.js. Czy ktoś ma udane implementacje tego, które działają w ie7? IE7 reprezentuje ponad 30% naszych użytkowników. Smutne, ale prawdziwe, a zmiana klucza reg nie wchodzi w grę. Powiedzenie milionowi użytkowników rządowych, aby po prostu przeprowadzili hackowanie registrów, nie będzie latać.
CD Smith

Wiem, że to stare pytanie, ale jest powtarzane, więc oto odpowiedź: pierwotne pytanie dotyczy DEWELOPERÓW, którzy debugują pobieranie JSON. Modyfikacja rejestru jest sugerowana jako krok, aby pomóc tym programistom. Modyfikowanie rejestru nie jest zalecane ani sugerowane dla zwykłych użytkowników. Ponadto: NIGDY nie ma potrzeby, aby zwykli użytkownicy (= milion użytkowników rządowych) przeglądali JSON w przeglądarce.
Cheeso

Po prostu użyj text/plain; charset=UTF-8. Nie ma potrzeby tekst / html.
perryflynn

13

Powyższego rozwiązania brakowało, a poniższy kod powinien działać w każdej sytuacji:

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

Po prostu zapisz plik json.reg i uruchom, aby zmodyfikować rejestr.


Mój komputer służbowy jest zablokowany. Jeśli potrzebujesz dodać je w wierszu poleceń, zobacz tę odpowiedź. stackoverflow.com/questions/13809856/… Dzięki OP. Widzę json w IE ........ yay!
granadaCoder

2

Jeśli wystarczy, że IE otworzy JSON w notatniku, możesz zmienić domyślny program systemu dla plików .json na Notatnik.

Aby to zrobić, utwórz lub znajdź plik .json, kliknij prawym przyciskiem myszy i wybierz opcję „Otwórz za pomocą” lub „Wybierz program domyślny”.

Może się to przydać, jeśli przez przypadek chcesz użyć przeglądarki Internet Explorer, ale Twoja firma informatyczna nie pozwoli Ci edytować rejestru. W przeciwnym razie polecam powyższe odpowiedzi.


1

Używam Skrzypek z JSONViewer plugin do wglądu JSON. Nie sądzę, aby możliwe było sprawienie, by IE zachowywał się bez majstrowania przy rejestrze. Oto kilka informacji.


1

Zmiana ustawień typu MIME JSON w IE wpłynie na sposób, w jaki IE traktuje wszystkie odpowiedzi JSON.

Zmiana nagłówka typu MIME na tekst / html skutecznie powie każdej przeglądarce, że zwracana odpowiedź JSON nie jest JSON, ale zwykłym tekstem.

Żadna z opcji nie jest preferowana.

Zamiast tego chciałbyś użyć wtyczki lub narzędzia, takiego jak wspomniany wyżej Fiddler lub dowolny inny serwer proxy inspektora ruchu sieciowego, w którym możesz za każdym razem wybrać sposób przetwarzania odpowiedzi JSON.


2
text/htmlnie informuje przeglądarki, że odpowiedź jest zwykłym tekstem, ale HTML. Jeśli zdecydujesz, że chcesz mieć zwykły tekst, użyj text/plain. W przeciwnym razie możesz mieć kilka interesujących luk w zabezpieczeniach XSS.
Michael Mior

0

FireFox + FireBug jest bardzo dobry do tego celu. W IE jest pasek narzędzi programisty, z którego nigdy nie korzystałem i nie zamierzam używać, więc nie mogę udzielić zbyt wielu opinii.


tak, wiem o wtyczce FF, która umożliwia wyświetlanie aplikacji / json jako zwykłego tekstu. W szczególności chcę wiedzieć o IE.
Cheeso

Jest pasek narzędzi programisty dla IE. Przy okazji, oto ładne porównanie różnych narzędzi dla programistów: elegantcode.com/2009/05/18/…
Darin Dimitrov

0

Właśnie miałem ten sam problem z XMLHttpRequest. Witryna działa bez zarzutu w Chrome i FF, a także w dziesiątkach przeglądarek Internet Explorer w produkcji. Ta JEDNA maszyna (oczywiście ta, którą nasza firma konfiguruje jako maszynę demonstracyjną) zdecydowała, że ​​zapyta o zapisanie odpowiedzi json na żądanie Ajax.

Zaakceptowane rozwiązanie regedit poniżej naprawiło to. Dzięki.


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.