我如何说服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/json
或Content-Type: text/json
返回一个doc的URL时,您得到的新行为如下所示:
它做什么,为什么它的工作原理:
25336920-03F9-11cf-8FD0-00AA00686F13
是“就地浏览”操作的CLSID。 基本上这个registry项告诉IE,对于具有MIMEtypes的application / json的文档,只需查看它就可以了。 这不会影响任何通过<script>
标签或通过XHR等下载的应用程序/ json文档。
CLSID和Encoding键获得用于image/gif
, image/jpeg
和text/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固定它。 谢谢。