我如何说服IE浏览器只显示应用程序/ JSON而不是提供下载?

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

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

替代文字

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

替代文字

我可以让IE浏览器不这样做,换句话说,只是将它显示为纯文本?

我知道我可以做到这一点,如果我的内容types头设置为text/plain

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

我find了答案。

您可以通过更新registry来configurationIE8以在浏览器窗口中显示application / json。 不需要外部工具。 我没有广泛的testing,但它与Vista上的IE8。

要使用这个,请记住,关于更新registry的所有常见注意事项都适用。 停止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/jsonContent-Type: text/json返回一个doc的URL时,您得到的新行为如下所示:

替代文字

它做什么,为什么它的工作原理:

25336920-03F9-11cf-8FD0-00AA00686F13是“就地浏览”操作的CLSID。 基本上这个registry项告诉IE,对于具有MIMEtypes的application / json的文档,只需查看它就可以了。 这不会影响任何通过<script>标签或通过XHR等下载的应用程序/ json文档。

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

这个提示来自这个网站 ,以及微软的文章处理Internet Explorer中的MIMEtypes 。


在FF中,您也不需要外部附加组件。 你可以使用view-source:伪协议。 在地址栏中input一个这样的url:

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

这个伪协议曾经在IE中被支持,直到WinXP-sp2,当Microsoft出于安全原因禁用它。

我有一个类似的问题。 我使用的是“$。GetJSON”jQuery,并且在Firefox和Chrome浏览器中都能正常工作。

但它在IE中不起作用。 所以我试图直接访问JSON的URL,但在IE浏览器询问我是否想下载文件。

经过大量search,我看到在结果中必须有一个内容types的标题,在我的情况下,内容types是:

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

但是当发出请求的页面收到这个json,在IE中,你必须指定相同的内容types,在我的情况是:

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

拥抱

以上的解决scheme是缺less的东西,下面的代码应该在任何情况下工作:

 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,并运行修改您的registry。

如果您只要将IE打开到记事本就可以了,您可以将系统的.json文件的默认程序更改为记事本。

为此,请创build或查找.json文件,单击鼠标右键,然后select“打开方式”或“select默认程序”。

这可能会派上用场,如果你偶然想使用Internet Explorer,但你的IT公司不会让你编辑你的registry。 否则,我build议上面的答案。

我用JSONViewer插件的Fiddler检查JSON。 我不认为有可能使IE浏览器行为没有摆脱registry或许。 这是一些信息。

更改IE的JSON MIMEtypes设置将影响IE对待所有 JSON响应的方式。

将mimetypes的标题更改为text / html将有效地告诉浏览器您所返回的JSON响应不是JSON,而是纯文本。

这两个选项都不可取。

相反,你会想要使用像上面提到的提琴手或任何其他networkingstream量检查代理插件或工具,您可以select每次如何处理JSON响应。

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

您可以在Fiddler中看到回复: http : //www.fiddler2.com/fiddler2/

这是很好的工具,这样的事情!

我只是有一个与XMLHttpRequest相同的问题。 该网站在Chrome和FF中的function完美无瑕,并且在数十种正在生产的Internet Explorer浏览器中运行。 这台ONE机器(当然是我们公司设置的演示机器)决定它将提示将json响应保存到ajax请求。

下面接受的registry解决scheme固定它。 谢谢。