ฉันจะโน้มน้าวให้ IE เพียงแค่แสดงแอปพลิเคชัน / json แทนที่จะเสนอให้ดาวน์โหลดได้อย่างไร


161

ในขณะที่การดีบักแอป jQuery ที่ใช้ AJAX ฉันมักจะต้องเห็น json ที่บริการส่งกลับไปยังเบราว์เซอร์ ดังนั้นฉันจะวาง URL สำหรับข้อมูล JSON ลงในแถบที่อยู่

นี่เป็นสิ่งที่ดีกับ ASPNET เพราะในกรณีที่มีข้อผิดพลาดในการเขียนรหัสฉันสามารถเห็น ASPNET diagostic ในเบราว์เซอร์:

ข้อความแสดงแทน

แต่เมื่อโค้ดฝั่งเซิร์ฟเวอร์ทำงานอย่างถูกต้องและส่งคืน JSON จริง ๆ แล้ว IE จะแจ้งให้ฉันทำการดาวน์โหลดดังนั้นฉันจึงไม่เห็นการตอบสนอง

ข้อความแสดงแทน

ฉันจะให้ IE ทำแบบนั้นไม่ได้หรือไม่เพื่อแสดงให้เหมือนกับว่าเป็นข้อความธรรมดาหรือไม่

text/plainฉันรู้ว่าฉันสามารถทำเช่นนี้ถ้าผมตั้งหัวประเภทเนื้อหาที่จะ

แต่นี่เป็นบริบทเฉพาะของแอป ASPNET MVC ซึ่งตั้งค่าการตอบกลับอัตโนมัติเมื่อฉันใช้ JsonResult กับหนึ่งในวิธีการกระทำของฉัน นอกจากนี้ฉันต้องการเก็บประเภทเนื้อหาที่เหมาะสมและไม่เปลี่ยนแปลงเพียงเพื่อสนับสนุนการแก้ไขข้อบกพร่อง


Firefox 3/4 ก็ทำเช่นนี้หากคุณมีเครื่องที่ไม่ได้รับการอัพเดต
Chris S

8
ฉันชอบการใช้ "โน้มน้าว" !!
adardesign

คำตอบ:


234

ฉันพบคำตอบ

คุณสามารถกำหนดค่า 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เป็นดังนี้:

ข้อความแสดงแทน

มันทำอะไรทำไมถึงได้ผล:

นี่25336920-03F9-11cf-8FD0-00AA00686F13คือ CLSID สำหรับการกระทำ "เรียกดูสถานที่" โดยทั่วไปรายการรีจิสทรีนี้จะบอก IE ว่าสำหรับเอกสารที่มีประเภท mime ของ application / json เพียงแค่ดูมันในสถานที่ สิ่งนี้จะไม่มีผลกับเอกสารแอปพลิเคชัน / json ที่ดาวน์โหลดผ่าน<script>แท็กหรือผ่าน XHR และอื่น ๆ

คีย์ CLSID และการเข้ารหัสได้รับค่าเดียวกันที่ใช้สำหรับimage/gif, และ image/jpegtext/html

คำแนะนำนี้มาจากเว็บไซต์นี้และจากบทความของ Microsoft การจัดการประเภท MIME ใน Internet Explorer


ใน FF คุณไม่จำเป็นต้องใช้แอดออนภายนอก คุณสามารถใช้view-source:โปรโตคอลหลอกได้ ป้อน URL เช่นนี้ลงในแถบที่อยู่:

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

pseudo-protocol นี้เคยได้รับการสนับสนุนใน 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 มันเป็นเพียงเพื่อการดีบัก อ่านคำถามทั้งหมด
Anthony Shaw

2
ยังคงใช้งานได้ใน IE11 เมื่อชนะ 8.1 ไม่จำเป็นต้องรีสตาร์ทเบราว์เซอร์ด้วยซ้ำ ในกรณีของฉันฉันต้องการtext/jsonกุญแจ
Chris

15

ฉันมีปัญหาที่คล้ายกัน ฉันใช้ 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) {

กอด


สิ่งนี้ใช้ได้สำหรับฉันไม่ต้องยุ่งกับรีจิสทรีเพียงแค่เปลี่ยนหัวข้อการตอบสนองด้วยเช่นกัน "text / html"
64k

2
สิ่งนี้ทำงานใน IE7 เมื่อทำการโทร Ajax และรับ json เป็นผลได้อย่างไร ฉันไม่ได้ใช้ getJSON แต่เป็นการโทร. jax ฉันใช้ประเภทเนื้อหานั้นในการตอบกลับและส่วนหัวและไม่ช่วยอะไรเลย ไม่ใช้ json2.js ใครบ้างมีการใช้งานที่ประสบความสำเร็จของงานนี้ใน IE7? IE7 แสดงถึงผู้ใช้ของเรามากกว่า 30% เศร้า แต่จริงและการเปลี่ยนแปลงคีย์ reg ไม่ใช่ตัวเลือก การบอกผู้ใช้กว่าล้านคนให้ใช้งานแฮ็ค reg จะไม่บิน
ซีดีสมิ ธ

ฉันรู้ว่านี่เป็นคำถามเก่า แต่กำลังถูกทำซ้ำดังนั้นนี่คือคำตอบ: คำถามดั้งเดิมเกี่ยวข้องกับนักพัฒนาที่กำลังดีบั๊กในการเรียกค้น JSON ขอแนะนำให้แก้ไข reg เป็นขั้นตอนเพื่อช่วยนักพัฒนาเหล่านั้น การทำสำเนารีจิสทรีไม่แนะนำหรือแนะนำสำหรับผู้ใช้ทั่วไป นอกจากนี้: ไม่จำเป็นสำหรับผู้ใช้ทั่วไป (= ผู้ใช้รัฐบาลล้านคน) เพื่อดู 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/… ขอบคุณ OP ฉันเห็น json ใน IE ........ ใช่!
granadaCoder

2

หากคุณไม่เป็นไรเมื่อเปิด IE ขึ้นมาให้ใช้ JSON เป็นแผ่นจดบันทึกคุณสามารถเปลี่ยนโปรแกรมเริ่มต้นของระบบสำหรับไฟล์. json เป็น Notepad ได้

หากต้องการทำสิ่งนี้ให้สร้างหรือค้นหาไฟล์. json คลิกเมาส์ขวาแล้วเลือก "เปิดด้วย" หรือ "เลือกโปรแกรมเริ่มต้น"

สิ่งนี้อาจมีประโยชน์หากคุณต้องการใช้ Internet Explorer แต่ บริษัท ไอทีของคุณไม่อนุญาตให้คุณแก้ไขรีจิสทรี มิฉะนั้นฉันแนะนำคำตอบข้างต้น


1

ฉันใช้Fiddlerกับปลั๊กอินJSONViewerเพื่อตรวจสอบ JSON ฉันไม่คิดว่าเป็นไปได้ที่จะทำให้ IE ทำงานโดยไม่ต้องเล่นซอกับรีจิสตรี นี่คือข้อมูลบางส่วน


1

การเปลี่ยนการตั้งค่าประเภท mime ของ JSON ของ IE จะส่งผลกระทบต่อวิธีที่ IE ปฏิบัติต่อการตอบสนองของ JSON ทั้งหมด

การเปลี่ยนส่วนหัว mime-type เป็น text / html จะบอกเบราว์เซอร์ใด ๆ ได้อย่างมีประสิทธิภาพว่าการตอบสนอง JSON ที่คุณส่งคืนไม่ใช่ JSON แต่เป็นข้อความธรรมดา

ตัวเลือกทั้งสองจะดีกว่า

แต่คุณต้องการใช้ปลั๊กอินหรือเครื่องมือเช่นพู้ทำเล่นดังกล่าวข้างต้นหรือพร็อกซีตัวตรวจสอบปริมาณการใช้เครือข่ายอื่น ๆ ที่คุณสามารถเลือกแต่ละครั้งวิธีประมวลผลการตอบสนอง JSON


2
text/htmlไม่ได้บอกเบราว์เซอร์ว่าการตอบสนองเป็นข้อความธรรมดา แต่เป็น HTML text/plainหากคุณตัดสินใจที่คุณต้องการข้อความธรรมดาใช้ มิฉะนั้นคุณอาจพบช่องโหว่ XSS ที่น่าสนใจ
Michael Mior

0

FireFox + FireBug ดีมากสำหรับวัตถุประสงค์นี้ สำหรับ IE มีแถบเครื่องมือผู้พัฒนาซึ่งฉันไม่เคยใช้และตั้งใจจะใช้ดังนั้นฉันจึงไม่สามารถให้ข้อเสนอแนะได้มากนัก


ใช่ฉันรู้เกี่ยวกับปลั๊กอิน FF ที่ช่วยให้การแสดงแอปพลิเคชัน / json เป็นข้อความปกติ ฉันอยากรู้เกี่ยวกับ IE เป็นพิเศษ
Cheeso

มีแถบเครื่องมือผู้พัฒนาสำหรับ IE โดยวิธีการที่นี่เป็นการเปรียบเทียบที่ดีของเครื่องมือต่าง ๆ สำหรับนักพัฒนา: elegantcode.com/2009/05/18/…
ดารินดิมิททรอฟ

0

ฉันเพิ่งมีปัญหาเดียวกันกับ XMLHttpRequest ไซต์ทำงานได้อย่างไม่มีที่ติใน Chrome และ FF และในเบราว์เซอร์ Internet Explorer หลายสิบตัวในการผลิต เครื่องหนึ่งเครื่องนี้ (บริษัท ของเรากำลังตั้งค่าให้เป็นเครื่องสาธิตแน่นอน) ตัดสินใจว่าจะพร้อมที่จะบันทึกการตอบสนอง json กับคำขอ ajax

โซลูชัน regedit ที่ยอมรับด้านล่างแก้ไข ขอบคุณ


-1

คุณสามารถดูการตอบสนองใน Fiddler: http://www.fiddler2.com/fiddler2/

นั่นเป็นเครื่องมือที่ดีสำหรับสิ่งต่าง ๆ !


ฉันรู้เกี่ยวกับพู้ทำเล่น แต่ดูเหมือนว่า overkill สำหรับสิ่งที่เรียบง่ายนี้
Cheeso
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.