我怎样才能说服 IE 仅仅显示 application/json 而不是提供下载呢?

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

这对于 ASPNET 来说很不错,因为一旦出现编码错误,我可以在浏览器中看到 ASPNET 的诊断信息:

alt text

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

alt text

我可以让 IE 不这样做,换句话说,只是显示它,如果它是纯文本?

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

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

155959 次浏览

FireFox + FireBug 非常适合这个目的。对于 IE 有一个 开发人员工具栏,我从来没有使用过,并打算使用,所以我不能提供太多的反馈。

您可以在 Fiddler: http://www.fiddler2.com/fiddler2/中看到响应

这是很好的工具,为这种事情!

我使用 小提琴手JSONViewer插件来检查 JSON。我不认为这是可能的,使 IE 行为不摆弄注册表也许。给你一些信息。

我找到了答案。

通过更新注册表,可以将 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

然后双击。注册文件。重启 IE。当你使用 Content-Type: application/json或者 Content-Type: text/json来回复一个文档的 URL 时,你得到的新行为是这样的:

alt text

它是做什么的,为什么有效:

25336920-03F9-11cf-8FD0-00AA00686F13是“ Browse in place”操作的 CLSID。基本上,这个注册表条目告诉 IE,对于具有 mime 类型的 application/json 的文档,只需在适当的位置查看它。这不会影响通过 <script>标记或通过 XHR 等下载的任何应用程序/json 文档。

CLSID 和 Encoding 键获得与 image/gifimage/jpegtext/html相同的值。

这个提示来自 这个网站和微软的文章 在 Internet Explorer 中处理 MIME 类型


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

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

这个伪协议过去在 IE 中也是受支持的,直到 WinXP-sp2,微软出于安全原因禁用了它。

我也遇到过类似的问题,当时我使用的是“ $. GetJSON”jQuery,在 Firefox 和 Chrome 中,一切都很完美。

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

经过多次搜索,我发现结果中必须有一个带有 content-type 的头,在我的例子中,content-type 是:

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

但是,当发出请求的页面在 IE 中接收到这个 json 时,必须指定相同的 Content-TYPE,在我的例子中是:

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

拥抱

改变 IE 的 JSON 模拟类型设置将影响 IE 处理 所有 JSON 响应的方式。

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

这两种选择都不可取。

相反,您希望使用一个插件或工具,如上面提到的 Fiddler 或任何其他网络流量检查器代理,您可以选择每次如何处理 JSON 响应。

如果您可以让 IE 将 JSON 打开到一个记事本中,那么您可以将系统的默认程序改为。Json 文件到记事本。

为此,创建或查找. json 文件,右键单击并选择“ Open With”或“ Select Default Program”

如果你偶然想要使用 Internet Explorer,但是你的 IT 公司不允许你编辑注册表,那么这可能会派上用场。否则,我推荐以上的答案。

上面的解决方案缺少的东西,下面的代码应该在任何情况下工作:

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 文件,然后运行以修改注册表即可。

我刚刚在 XMLHttpRequest 上遇到了同样的问题。这个网站在 Chrome 和 FF 浏览器中运行得完美无缺,在生产中的几十个 Internet Explorer 浏览器中也是如此。这台 ONE 机器(当然是我们公司正在设置的演示机器)决定提示将 json 响应保存到 ajax 请求中。

接受注册表解决方案下面修复它。谢谢。