Bagaimana saya bisa meyakinkan IE untuk hanya menampilkan aplikasi / json daripada menawarkan untuk mengunduhnya?

161

Saat men-debug aplikasi jQuery yang menggunakan AJAX, saya sering perlu melihat json yang sedang dikembalikan oleh layanan ke browser. Jadi saya akan memasukkan URL untuk data JSON ke bilah alamat.

Ini bagus dengan ASPNET karena jika terjadi kesalahan pengkodean, saya dapat melihat ASPNET diagostic di browser:

teks alternatif

Tetapi ketika kode sisi server bekerja dengan benar dan benar-benar mengembalikan JSON, IE meminta saya untuk mengunduhnya, jadi saya tidak dapat melihat jawabannya.

teks alternatif

Dapatkah saya membuat IE TIDAK melakukan itu, dengan kata lain, hanya menampilkannya seolah-olah itu teks biasa?

Saya tahu saya bisa melakukan ini jika saya mengatur header Tipe Konten menjadi text/plain.

Tapi ini secara khusus merupakan konteks aplikasi ASPNET MVC, yang mengatur respons secara otomatis ketika saya menggunakan JsonResult pada salah satu metode tindakan saya. Saya juga ingin mempertahankan tipe konten yang sesuai, dan tidak mengubahnya hanya untuk mendukung upaya debugging.

Cheeso
sumber
Firefox 3/4 juga melakukan ini, jika Anda memiliki mesin yang belum diperbarui.
Chris S
8
Saya suka penggunaan "meyakinkan" !!
adardesign

Jawaban:

234

Saya menemukan jawabannya.

Anda dapat mengkonfigurasi IE8 untuk menampilkan aplikasi / json di jendela browser dengan memperbarui registri. Tidak perlu alat eksternal. Saya belum menguji ini secara luas, tetapi bekerja dengan IE8 di Vista.

Untuk menggunakan ini, ingat, semua peringatan tentang memperbarui registri berlaku. Hentikan IE. Kemudian, potong dan rekatkan yang berikut ke dalam file, dengan nama 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

Kemudian klik dua kali file .reg. Mulai ulang IE. Perilaku baru yang Anda dapatkan saat menggelitik URL yang mengembalikan dokumen dengan Content-Type: application/jsonatau Content-Type: text/jsonseperti ini:

teks alternatif

Apa yang dilakukannya, mengapa itu bekerja:

Ini 25336920-03F9-11cf-8FD0-00AA00686F13adalah CLSID untuk tindakan "Browse in place". Pada dasarnya entri registri ini memberi tahu IE bahwa untuk dokumen yang memiliki tipe aplikasi mime / json, cukup tampilkan di tempat. Ini tidak akan memengaruhi aplikasi / dokumen json apa pun yang diunduh melalui<script> tag, atau melalui XHR, dan sebagainya.

Kunci CLSID dan Encoding mendapatkan nilai-nilai yang sama digunakan untuk image/gif, image/jpegdantext/html .

Petunjuk ini datang dari situs ini , dan dari artikel Microsoft Menangani Jenis MIME di Internet Explorer .


Di FF, Anda tidak perlu tambahan eksternal. Anda bisa menggunakan view-source:protokol semu. Masukkan URL seperti ini ke bilah alamat:

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

Protokol semu ini dulunya didukung di IE, juga, hingga WinXP-sp2, ketika Microsoft menonaktifkannya untuk alasan keamanan.

Cheeso
sumber
13
Jika Anda ingin melewatkan membuat file registri, berikut adalah satu-liner yang dapat Anda tempelkan ke jendela 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, tidak perlu meminta bagian terbesar dari dunia apa pun. Menampilkan JSON di browser adalah sesuatu yang ingin dilakukan oleh pengembang halaman AJAX. Sama sekali tidak perlu untuk menampilkan JSON di browser untuk pengguna biasa.
Cheeso
3
Saya membuat kesalahan fatal dengan membiarkan seorang teman meminjam kotak saya dan dia menjalankan perbaikan ini. Apakah ada yang tahu apa pengaturan asli sehingga saya bisa membalikkannya?
KevDog
7
@Mosh, ini disebutkan oleh nathanvda di atas, solusinya bukan agar pengguna situs web dapat melihat JSON, itu hanya untuk tujuan debugging. Baca seluruh pertanyaan.
Anthony Shaw
2
Ini masih bekerja di IE11 pada win 8.1. Bahkan tidak perlu me-restart browser. Dalam kasus saya, saya membutuhkan text/jsonkuncinya.
Chris
15

Saya punya masalah serupa. Saya menggunakan jQuery "$. GetJSON" dan semuanya bekerja dengan baik di Firefox dan Chrome.

Tetapi tidak berhasil di IE. Jadi saya mencoba mengakses URL json secara langsung, tetapi di IE ditanya apakah saya ingin mengunduh file tersebut.

Setelah banyak pencarian, saya melihat bahwa harus ada header di hasil dengan tipe konten, dalam kasus saya, tipe kontennya adalah:

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

Tetapi ketika halaman yang membuat permintaan menerima json ini, di IE, Anda harus ditentukan JENIS KONTEN SAMA, dalam kasus saya adalah:

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

pelukan

Fillipe Silva
sumber
Ini bekerja untuk saya, tidak perlu berurusan dengan registri, cukup ubah tajuk respons juga "teks / html".
64k
2
Bagaimana cara kerjanya di IE7 saat melakukan panggilan Ajax dan menerima json sebagai hasilnya? Saya tidak menggunakan getJSON melainkan panggilan .ajax. Saya telah menggunakan jenis konten itu sebagai respons dan tajuk dan sama sekali tidak membantu. Juga tidak menggunakan json2.js. Apakah ada yang berhasil menerapkan ini yang bekerja di IE7? IE7 mewakili lebih dari 30% pengguna kami. Sedih tapi benar, dan perubahan kunci reg bukanlah pilihan. Memberitahu sejuta pengguna pemerintah untuk menjalankan reg hack tidak akan bisa terbang.
CD Smith
Saya tahu ini adalah pertanyaan lama, tetapi ini sedang diulang, jadi inilah jawabannya: Pertanyaan asli berkaitan dengan DEVELOPERS yang sedang men-debug pengambilan JSON. Memodifikasi reg disarankan sebagai langkah untuk membantu para pengembang tersebut. Modyfing registri tidak disarankan atau disarankan untuk pengguna umum. Juga: TIDAK PERNAH ada kebutuhan bagi pengguna reguler (= sejuta pengguna pemerintah) untuk melihat JSON di browser.
Cheeso
Gunakan saja text/plain; charset=UTF-8. Tidak perlu teks / html.
perryflynn
13

Solusi di atas adalah hal yang hilang, dan kode di bawah ini harus berfungsi dalam setiap situasi:

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

Simpan saja file json.reg, dan jalankan untuk memodifikasi registri Anda.

Tomasz Maj
sumber
Komputer kerja saya terkunci. Jika Anda perlu perintah baris tambahkan ini, lihat jawaban ini. stackoverflow.com/questions/13809856/... Terima kasih OP. Saya melihat json di IE ........ yay!
granadaCoder
2

Jika Anda setuju dengan IE membuka JSON ke notepad, Anda dapat mengubah program default sistem Anda untuk file .json menjadi Notepad.

Untuk melakukan ini, buat atau temukan file .json, klik kanan mouse, dan pilih "Open With" atau "Choose Default Program."

Ini mungkin berguna jika Anda ingin menggunakan Internet Explorer tetapi perusahaan IT Anda tidak akan membiarkan Anda mengedit registri Anda. Kalau tidak, saya merekomendasikan jawaban di atas.

Porschiey
sumber
1

Saya menggunakan Fiddler dengan plugin JSONViewer untuk memeriksa JSON. Saya rasa tidak mungkin membuat IE berperilaku tanpa mengutak-atik registri. Ini beberapa informasi.

Chetan S
sumber
1

Mengubah pengaturan tipe mime JSON IE akan mempengaruhi cara IE memperlakukan semua respons JSON.

Mengubah tajuk tipe mime ke teks / html akan secara efektif memberi tahu browser apa pun bahwa respons JSON yang Anda kembalikan bukan JSON tetapi teks biasa.

Tidak ada opsi yang lebih disukai.

Alih-alih, Anda ingin menggunakan plugin atau alat seperti Fiddler yang disebutkan di atas atau proxy pengawas lalu lintas jaringan lainnya di mana Anda dapat memilih setiap kali bagaimana memproses respons JSON.

pengguna1632922
sumber
2
text/htmltidak memberi tahu browser bahwa responsnya adalah teks biasa, tetapi HTML. Jika Anda memutuskan ingin teks biasa, gunakan text/plain. Kalau tidak, Anda bisa berakhir dengan beberapa kerentanan XSS yang menarik.
Michael Mior
0

FireFox + FireBug sangat baik untuk tujuan ini. Untuk IE ada toolbar pengembang yang saya tidak pernah gunakan dan berniat untuk digunakan jadi saya tidak bisa memberikan banyak umpan balik.

Darin Dimitrov
sumber
ya, saya tahu tentang plugin FF yang memungkinkan tampilan aplikasi / json sebagai teks biasa. Saya secara khusus ingin tahu tentang IE.
Cheeso
Ada toolbar pengembang untuk IE. Omong-omong, inilah perbandingan yang bagus dari berbagai alat untuk pengembang: elegantcode.com/2009/05/18/…
Darin Dimitrov
0

Saya baru saja mengalami masalah yang sama dengan XMLHttpRequest. Situs berfungsi dengan sempurna di Chrome dan FF, dan dalam puluhan browser Internet Explorer dalam produksi. SATU mesin ini (yang diatur oleh perusahaan kami untuk menjadi mesin demo, tentu saja) memutuskan bahwa ia akan meminta untuk menyimpan respons json ke permintaan ajax.

Solusi regedit yang diterima di bawah memperbaikinya. Terima kasih.

Kintar
sumber
-1

Anda bisa melihat jawabannya di Fiddler: http://www.fiddler2.com/fiddler2/

Itu alat yang bagus untuk hal-hal seperti itu!

asgerhallas
sumber
Saya tahu tentang Fiddler, tetapi tampaknya terlalu banyak untuk sesuatu yang sederhana ini.
Cheeso