如何说服IE仅显示application / json而不是提供下载?


161

在调试使用AJAX的jQuery应用程序时,我经常需要查看服务返回给浏览器的json。因此,我将JSON数据的URL放入地址栏中。

这对ASPNET很好,因为在发生编码错误的情况下,我可以在浏览器中看到ASPNET诊断错误:

替代文字

但是,当服务器端代码正常工作并实际返回JSON时,IE会提示我下载它,因此看不到响应。

替代文字

我可以让IE不这样做吗,换句话说,就是像纯文本一样显示它吗?

我知道如果将Content-Type标头设置为,我可以做到这一点text/plain

但这特别是一个ASPNET MVC应用程序的上下文,当我在一种操作方法上使用JsonResult时,它将自动设置响应。我还想保留适当的内容类型,而不是仅仅为了支持调试而更改它。


如果您的计算机尚未更新,Firefox 3/4也会执行此操作。
克里斯·S

8
我喜欢“说服”的用法!
adardesign

Answers:


234

我找到了答案。

您可以通过更新注册表将IE8配置为在浏览器窗口中显示application / json。无需外部工具。我没有对此进行广泛的测试,但是它可以在Vista上的IE8上使用。

要使用此功能,请记住,所有有关更新注册表的常规警告都适用。停止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。勾选带有Content-Type: application/json或的返回文档的URL时,您将获得以下新行为Content-Type: text/json

替代文字

它做什么,为什么起作用:

25336920-03F9-11cf-8FD0-00AA00686F13是“就地浏览”操作的CLSID。基本上,此注册表项告诉IE,对于具有MIME类型的application / json的文档,只需就地查看即可。这不会影响通过<script>标签或XHR等下载的任何application / json文档。

CLSID和编码密钥获得用于相同的价值观image/gifimage/jpegtext/html

此提示来自此站点,以及Microsoft的文章“ 在Internet Explorer中处理MIME类型”


在FF中,您也不需要外部加载项。您可以只使用view-source:伪协议。在地址栏中输入如下网址:

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 2012年

2
@nathanvda,无需询问世界上最大的任何地方。在浏览器中显示JSON是AJAX页面的开发人员想要做的事情。普通用户无需在浏览器中显示JSON。
Cheeso 2012年

3
我犯了致命的错误,让一个朋友借我的盒子,他跑了这个补丁。有人知道原始设置是什么,以便我可以撤销它们吗?
KevDog

7
@Mosh,这是nathanvda上面提到的,解决方案不是让网站的用户可以查看JSON,它只是出于调试目的。阅读整个问题。
Anthony Shaw

2
IE11在win 8.1上仍然可以使用。甚至不需要重新启动浏览器。就我而言,我需要text/json钥匙。
克里斯

15

我有一个类似的问题。我使用的是“ $。GetJSON” jQuery,一切在Firefox和Chrome中都可以正常运行。

但是它在IE中不起作用。因此,我尝试直接访问json的URL,但是在IE中,它询问我是否要下载文件。

经过大量搜索后,我发现结果中必须有一个带有内容类型的标头,在我的情况下,内容类型为:

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

但是当发出请求的页面在IE中接收到此json时,必须指定SAME CONTENT-TYPE,在我的情况下是:

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

拥抱


这对我有用,不需要弄乱注册表,只需将响应头也更改为“ text / html”。
64k 2012年

2
进行Ajax调用并接收json时,这在IE7中如何工作?我没有使用getJSON而是一个.ajax调用。我已经在响应和标头中使用了该内容类型,但它根本没有帮助。都没有使用json2.js。有人能在ie7中成功实现此功能吗?IE7代表了我们30%以上的用户。悲伤但真实,并且不能更改reg键。告诉一百万个政府用户只运行reg hack不会成功。
CD Smith

我知道这是一个古老的问题,但是它是重复的,因此,答案是:原始问题与调试JSON检索的开发人员有关。建议修改reg作为帮助这些开发人员的步骤。不建议普通用户修改注册表。另外:永远不需要普通用户(= 100万政府用户)在浏览器中查看JSON。
Cheeso 2014年

只需使用text/plain; charset=UTF-8。无需text / 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。我在IE中看到json ........是的!
granadaCoder

2

如果仅通过IE将JSON打开到记事本中就可以了,则可以将系统的.json文件默认程序更改为记事本。

为此,请创建或找到.json文件,右键单击并选择“打开方式”或“选择默认程序”。

如果您偶然想使用Internet Explorer,但IT公司不会允许您编辑注册表,则这可能会派上用场。否则,我建议以上答案。



1

更改IE的JSON MIME类型设置将影响IE处理所有 JSON响应的方式。

将mime-type标头更改为text / html可以有效地告诉任何浏览器您返回的JSON响应不是JSON而是纯文本。

两种选择都不可取。

相反,您可能想要使用上述Fiddler或任何其他网络流量检查器代理之类的插件或工具,您可以在其中每次选择如何处理JSON响应。


2
text/html不会告诉浏览器响应是纯文本,而是HTML。如果确定要使用纯文本,请使用text/plain。否则,您可能会遇到一些有趣的XSS漏洞。
Michael Mior


0

我只是对XMLHttpRequest有同样的问题。该网站在Chrome和FF中以及在​​生产中的数十种Internet Explorer浏览器中均可完美运行。这台ONE机器(我们公司将其设置为演示机器,当然)决定要提示将json响应保存到ajax请求。

下面接受的regedit解决方案将其修复。谢谢。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.