zoukankan      html  css  js  c++  java
  • 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_ROOTMIMEDatabaseContent Typeapplication/json]
    "CLSID"="{25336920-03F9-11cf-8FD0-00AA00686F13}"
    "Encoding"=dword:00080000
    
    
    [HKEY_CLASSES_ROOTMIMEDatabaseContent Type	ext/json]
    "CLSID"="{25336920-03F9-11cf-8FD0-00AA00686F13}"
    "encoding"=dword:00080000

    经测试,是可行的。但让用户这样干,恐怕不好实行。

    另一种方法: 把返回的 Json 标志改为 text/html , 但这也太狗血了。

    等着 IE10 SP1 吧。狗血的IE

  • 相关阅读:
    委托示例一则
    JQuery学习笔记(3)JQuery中的DOM操作
    JQuery学习笔记(2)JQuery选择器
    把.net的web开发补起来,徐图之
    今天把swagger补了一下
    Azure Cosmos DB Core (SQL)
    wcf callback channel问题多多
    gitlab安装
    Kubernetes
    搜索功能实现
  • 原文地址:https://www.cnblogs.com/newsea/p/3158309.html
Copyright © 2011-2022 走看看