IE10不能显示JSON文件内容
IE7,8,9下Ajax返回后,再执行跳转,会弹出阻止提示框。
所以我采用WebForm 提交思想:
//导出 jv.postOpen = jv.PostOpen = jv.Export = function (url, postJson, op) { var entity = op.entity ; var target = op.target || entity; var _createIframe = function (id) { var iframe = jv.toElement('<iframe src="javascript:false;" name="' + id + '" />'); iframe.setAttribute('id', id); iframe.style.display = 'none'; document.body.appendChild(iframe); return iframe; }, _createForm = function (target) { var form = jv.toElement('<form method="POST"></form>'); form.setAttribute('action', url); form.setAttribute('target', target); form.style.display = 'none'; var isSimple = function (type) { return ["string", "number", "date"].indexOf(type) >= 0; }; var json = {}; var rec = function (obj, prefix) { if (jv.IsNull(obj)) return; if (prefix) prefix += "."; for (var k in obj) { var v = obj[k]; var t = jv.getType(v); if (isSimple(t)) { json[prefix + k] = v; continue; } rec(v, prefix + k); } }; rec(postJson, ""); if (json) { for (var k in json) { form.appendChild(jv.toElement('<input type="hidden" name="' + k + '" value="' + json[k] + '" />')); } } document.body.appendChild(form); return form; }; if (op.self) { var iframe = _createIframe(target); var fn = function () { if (!iframe.parentNode) { return; } var response; var doc = iframe.contentDocument ? iframe.contentDocument : iframe.contentWindow.document; try { var innerHTML ; var $html = $(doc.body.innerHTML) ; var $pre = $html.find("pre"); if ($pre.length == 0 ) innerHTML = $html.text() ; else innerHTML = $pre.text() ; //ie 返回的pre内容里,有 font ,还额外赠送一个 ^ 号。 if( innerHTML.slice(-1) == '^') innerHTML = innerHTML.slice(0,-1) ; // if (innerHTML.length > 10 && innerHTML.slice(0, 4).toLowerCase() == '<pre' && innerHTML.slice(-6).toLowerCase() == '</pre>') { // innerHTML = doc.body.firstChild.firstChild.nodeValue; // } if (innerHTML.length > 1 && innerHTML.slice(0, 1) != "<") { if ( innerHTML.slice(0, 1) == "{" && innerHTML.slice(-1) == "}"){ response = $.parseJSON( innerHTML) ; } else { response = jv.execJs( innerHTML ); } } } catch (err) { response = { success: false }; } if (response && response.extraJs) jv.execJs(response.extraJs); if (op.callback) op.callback(response,doc); }; //优先使用 attachEvent , 解决IE9下的BUG。 if (iframe.attachEvent) { iframe.attachEvent('onload', fn); } else if (iframe.addEventListener) { iframe.addEventListener('load', fn, false); } } else { var p = { entity: entity }; var whConfig = jv.PopListConfig(p.area, p.entity, p.detail); if (!p.width) { p.width = whConfig[0]; } if (!p.height) { p.height = whConfig[1]; } p.openMode = whConfig[2] || target; //多次打印多个窗口 p.entity = entity; p.autoFocus = false; jv.Pop("", p); } var form = _createForm(target); form.submit(); };
但 IE10 下由于无法直接解析 JSON, 在使用该机制时,会弹出下载提示,并且阻止客户端的解析。
解决方案:http://blog.csdn.net/wang_shaner/article/details/6668359
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\MIME\Database\Content Type\application/json]
"CLSID"="{25336920-03F9-11cf-8FD0-00AA00686F13}"
"Encoding"=dword:00080000
[HKEY_CLASSES_ROOT\MIME\Database\Content Type\text/json]
"CLSID"="{25336920-03F9-11cf-8FD0-00AA00686F13}"
"encoding"=dword:00080000
经测试,是可行的。但让用户这样干,恐怕不好实行。
另一种方法: 把返回的 Json 标志改为 text/html , 但这也太狗血了。
等着 IE10 SP1 吧。狗血的IE
作者:NewSea 出处:http://newsea.cnblogs.com/
QQ,MSN:iamnewsea@hotmail.com 如无特别标记说明,均为NewSea原创,版权私有,翻载必纠。欢迎交流,转载,但要在页面明显位置给出原文连接。谢谢。 |