Làm cách nào tôi có thể thuyết phục IE chỉ hiển thị ứng dụng / json thay vì đề nghị tải xuống?


161

Trong khi gỡ lỗi các ứng dụng jQuery sử dụng AJAX, tôi thường có nhu cầu xem json đang được dịch vụ trả về trình duyệt. Vì vậy, tôi sẽ thả URL cho dữ liệu JSON vào thanh địa chỉ.

Điều này thật tuyệt vời với ASPNET bởi vì trong trường hợp xảy ra lỗi mã hóa, tôi có thể thấy biểu đồ ASPNET trong trình duyệt:

văn bản thay thế

Nhưng khi mã phía máy chủ hoạt động chính xác và thực sự trả về JSON, IE sẽ nhắc tôi tải xuống, vì vậy tôi không thể thấy phản hồi.

văn bản thay thế

Tôi có thể yêu cầu IE KHÔNG làm điều đó, nói cách khác, chỉ hiển thị nó như thể nó là văn bản thuần túy?

Tôi biết tôi có thể làm điều này nếu tôi đặt tiêu đề Kiểu nội dung thành text/plain.

Nhưng đây đặc biệt là bối cảnh của ứng dụng ASPNET MVC, thiết lập phản hồi tự động khi tôi sử dụng JsonResult trên một trong các phương thức hành động của mình. Ngoài ra, tôi muốn giữ loại nội dung phù hợp và không thay đổi nội dung chỉ để hỗ trợ các nỗ lực gỡ lỗi.


Firefox 3/4 cũng thực hiện điều này, nếu bạn có một máy chưa được cập nhật.
Chris S

8
Tôi thích cách sử dụng "thuyết phục" !!
adardesign

Câu trả lời:


234

Tôi tìm thấy câu trả lời.

Bạn có thể cấu hình IE8 để hiển thị ứng dụng / json trong cửa sổ trình duyệt bằng cách cập nhật sổ đăng ký. Không cần một công cụ bên ngoài. Tôi đã không thử nghiệm điều này một cách rộng rãi, nhưng nó hoạt động với IE8 trên Vista.

Để sử dụng điều này, hãy nhớ, tất cả các cảnh báo thông thường về việc cập nhật sổ đăng ký đều được áp dụng. Dừng IE. Sau đó, cắt và dán đoạn sau vào một tệp, theo tên của 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

Sau đó bấm đúp vào tệp .reg. Khởi động lại IE. Hành vi mới bạn nhận được khi đánh dấu URL trả lại tài liệu có Content-Type: application/jsonhoặc Content-Type: text/jsongiống như sau:

văn bản thay thế

Nó làm gì, tại sao nó hoạt động:

Đây 25336920-03F9-11cf-8FD0-00AA00686F13là CLSID cho hành động "Duyệt tại chỗ". Về cơ bản, mục đăng ký này đang nói với IE rằng đối với các tài liệu có loại ứng dụng / json mime, chỉ cần xem nó tại chỗ. Điều này sẽ không ảnh hưởng đến bất kỳ tài liệu ứng dụng / json nào được tải xuống qua <script>thẻ hoặc qua XHR, v.v.

Các phím CLSID và Encoding có được cùng một giá trị sử dụng cho image/gif, image/jpegtext/html.

Gợi ý này xuất phát từ trang web này và từ bài viết của Microsoft Xử lý các loại MIME trong Internet Explorer .


Trong FF, bạn cũng không cần một tiện ích bổ sung bên ngoài. Bạn chỉ có thể sử dụng view-source:giao thức giả. Nhập một URL như thế này vào thanh địa chỉ:

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

Giao thức giả này từng được hỗ trợ trong IE, cho đến khi WinXP-sp2, khi Microsoft vô hiệu hóa nó vì lý do bảo mật.


13
Nếu bạn muốn bỏ qua việc tạo tệp đăng ký, đây là một lớp lót bạn có thể dán vào cửa sổ 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, không cần phải hỏi phần lớn nhất của thế giới. Hiển thị JSON trong trình duyệt là điều mà nhà phát triển của trang AJAX muốn làm. Hoàn toàn không cần thiết để hiển thị JSON trong trình duyệt cho người dùng thông thường.
Cheeso

3
Tôi đã phạm sai lầm chết người khi cho phép một người bạn mượn hộp của tôi và anh ta đã sửa lỗi này. Có ai biết các thiết lập ban đầu là gì để tôi có thể đảo ngược chúng?
KevDog

7
@Mosh, điều này đã được nathanvda đề cập ở trên, giải pháp không phải để người dùng trang web có thể xem JSON, nó chỉ đơn giản là cho mục đích gỡ lỗi. Đọc toàn bộ câu hỏi.
Anthony Shaw

2
Điều này vẫn hoạt động trong IE11 trên win 8.1. Thậm chí không cần phải khởi động lại trình duyệt. Trong trường hợp của tôi, tôi cần text/jsonchìa khóa.
Chris

15

Tôi đã có một vấn đề tương tự. Tôi đã sử dụng jQuery "$. GetJSON" và mọi thứ hoạt động hoàn hảo trong Firefox và Chrome.

Nhưng nó không hoạt động trong IE. Vì vậy, tôi đã cố gắng truy cập trực tiếp URL của json, nhưng trong IE nó hỏi tôi có muốn tải xuống tệp không.

Sau nhiều lần tìm kiếm, tôi thấy rằng phải có một tiêu đề trong kết quả với loại nội dung, trong trường hợp của tôi, loại nội dung là:

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

Nhưng khi trang yêu cầu nhận được json này, trong IE, bạn phải được chỉ định CÙNG NỘI DUNG-LOẠI, trong trường hợp của tôi là:

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

những cái ôm


Điều này làm việc cho tôi, không gây rối với đăng ký cần thiết, chỉ cần thay đổi tiêu đề phản hồi quá "text / html".
64k

2
Làm thế nào điều này hoạt động trong IE7 khi thực hiện một cuộc gọi Ajax và kết quả là nhận được json? Tôi không sử dụng getJSON mà là một cuộc gọi .ajax. Tôi đã sử dụng loại nội dung đó trong phản hồi và tiêu đề và nó hoàn toàn không giúp ích gì. Không sử dụng json2.js. Có ai đã thực hiện thành công điều này hoạt động trong eg7 không? IE7 đại diện cho hơn 30% người dùng của chúng tôi. Buồn nhưng đúng, và thay đổi khóa reg không phải là một lựa chọn. Nói với một triệu người dùng quản trị để chạy reg hack sẽ không bay.
CD Smith

Tôi biết đây là một câu hỏi cũ, nhưng nó đang được lặp lại, vì vậy đây là câu trả lời: Câu hỏi ban đầu liên quan đến các nhà PHÁT TRIỂN đang gỡ lỗi cho việc truy xuất JSON. Sửa đổi reg được đề xuất là một bước để giúp những nhà phát triển đó. Modyfing đăng ký không được khuyến nghị hoặc đề xuất cho người dùng phổ thông. Ngoài ra: KHÔNG BAO GIỜ cần người dùng thường xuyên (= một triệu người dùng chính phủ) để xem JSON trong trình duyệt.
Cheeso

Chỉ cần sử dụng text/plain; charset=UTF-8. Không cần phải nhắn tin / html.
perryflynn

13

Giải pháp trên là điều còn thiếu và mã bên dưới sẽ hoạt động trong mọi tình huống:

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

Chỉ cần lưu tệp json.reg và chạy để sửa đổi sổ đăng ký của bạn.


Máy tính làm việc của tôi bị khóa. Nếu bạn cần thêm dòng lệnh, hãy xem câu trả lời này. stackoverflow.com/questions/13809856/ cảm ơn OP. Tôi thấy json trong IE ........ yay!
granadaCoder

2

Nếu bạn ổn với việc IE mở JSON vào notepad, bạn có thể thay đổi chương trình mặc định của hệ thống cho các tệp .json thành Notepad.

Để thực hiện việc này, hãy tạo hoặc tìm tệp .json, nhấp chuột phải và chọn "Mở bằng" hoặc "Chọn chương trình mặc định".

Điều này có thể có ích nếu bạn tình cờ muốn sử dụng Internet Explorer nhưng công ty CNTT của bạn sẽ không cho phép bạn chỉnh sửa sổ đăng ký của mình. Nếu không, tôi đề nghị các câu trả lời ở trên.


1

Tôi sử dụng Fiddler với plugin JSONViewer để kiểm tra JSON. Tôi không nghĩ có thể làm cho IE hoạt động mà không phải loay hoay với registry. Đây là một số thông tin.


1

Thay đổi cài đặt loại mime JSON của IE sẽ ảnh hưởng đến cách IE xử lý tất cả các phản hồi JSON.

Thay đổi tiêu đề kiểu mime thành văn bản / html sẽ cho bất kỳ trình duyệt nào biết rằng phản hồi JSON mà bạn đang trả về không phải là JSON mà là văn bản thuần túy.

Không có lựa chọn nào là thích hợp hơn.

Thay vào đó, bạn sẽ muốn sử dụng một plugin hoặc công cụ như Fiddler đã đề cập ở trên hoặc bất kỳ proxy thanh tra lưu lượng mạng nào khác, nơi bạn có thể chọn mỗi lần cách xử lý phản hồi JSON.


2
text/htmlkhông cho trình duyệt biết rằng phản hồi là văn bản thuần túy, nhưng HTML. Nếu bạn quyết định bạn muốn văn bản đơn giản, sử dụng text/plain. Nếu không, bạn có thể kết thúc với một số lỗ hổng XSS thú vị.
Michael Mior

0

FireFox + FireBug rất tốt cho mục đích này. Đối với IE có một thanh công cụ dành cho nhà phát triển mà tôi chưa bao giờ sử dụng và có ý định sử dụng vì vậy tôi không thể cung cấp nhiều phản hồi.


vâng, tôi biết về plugin FF cho phép hiển thị ứng dụng / json như văn bản thông thường. Tôi đặc biệt muốn biết về IE, mặc dù.
Cheeso 20/03/2016

Có một thanh công cụ dành cho nhà phát triển cho IE. Nhân tiện, đây là một so sánh tuyệt vời của các công cụ khác nhau dành cho nhà phát triển: Elegantcode.com/2009/05/18/ Khăn
Darin Dimitrov

0

Tôi chỉ gặp vấn đề tương tự với XMLHttpRequest. Các trang web hoạt động hoàn hảo trong Chrome và FF và trong hàng chục trình duyệt Internet Explorer đang được sản xuất. Máy ONE này (dĩ nhiên là công ty chúng tôi đang thiết lập là máy demo) đã quyết định rằng nó sẽ nhắc nhở để lưu phản hồi json vào yêu cầu ajax.

Các giải pháp regedit được chấp nhận dưới đây đã sửa nó. Cảm ơn.


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.