从IE8升级到IE11时出错

需求答案

我正在从事从IE8到IE11的迁移项目。我的工作主要是修复CSS错误,但是我也遇到了JavaScript的一些问题。

在我的master.jsp页面中,我有以下JavaScript:

<script type="text/javascript">
$(function() {
    $.ajax({
         url: toFullPath('/getID.do')
        ,type: "POST"
        ,cache: false
        ,dataType: "text"
        ,success: function(data) {
            var jsonData = null;
            try {
                jsonData = jQuery.secureEvalJSON(data);
            } catch(e) {
                setTimeout(function() {
                    alert('Failed to start.');
                }, 10);
                return;
            }
            $.appconf.systemId = jsonData.systemId;
            setTimeout(function() {
                startSystem(document.forms['startForm'], toFullPath('/showLoginPageAction.do'));
            }, 10);
        }
    });
});
</script>

该脚本可以在IE8,IE9,IE10中正常运行

在IE11中运行此脚本时,它始终会失败。调试后,我发现data两个版本的IE中变量的值不同。

在IE8中,它是有效的JSON:

"
{"ID":"001","system_changes":{}}
"

但是在IE11中,它似乎是母版页的内容:

"\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n<!DOCTYPE html>\r\n<html>\r\n<head>\r\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=Edge\" />\r\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=shift_jis\">\r\n<meta http-equiv=\"Content-Style-Type\" content=\"text/css\">\r\n<meta http-equiv=\"Content-Script-Type\" content=\"text/javascript\">\

(抱歉,我无法复制完整的内容,因为它太长了。)

据我了解,data会由生成getID.do,但是当我使用调试模式时,似乎从未访问过此页面。

这种data形式在哪里为什么两个浏览器版本有所不同?

更新 :

使用Fiddler,我发现两个IE版本都向动作发送相同的请求:

POST /src/getID.do HTTP/1.1

在IE8中,服务器响应的Json内容和http代码为 200

但是在IE11中,响应的http代码是302,这意味着什么?

需求答案

找到了。

导致问题的原因是用户代理字符串。解决方案是修改服务器上的代码,以检查IE11的用户代理字符串。

public boolean isValidIE(String strAgent) {
    if (1==1){
        return true;
    }
    Pattern pattern = Pattern.compile(".*\\sMSIE\\s(\\d{1,}\\.\\d{1,})[^;]*;.*");

    Matcher match = pattern.matcher(strAgent);
    if(!match.matches()) {
        Pattern patternIE11 = Pattern.compile(".*Trident.*rv:.*");
        Matcher matcherIE11 = patternIE11.matcher(strAgent);
        if(matcherIE11.matches()){
            return true;
        }   
        return false;
    }
    String ver = match.group(1);
    float version = Float.parseFloat(ver);
    if(version >= 8) {
        return true;
    }
    return false;
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

我只能从IE8升级到IE9吗?最多不超过10或11

来自分类Dev

从25升级到Fedora 26时出错

来自分类Dev

从16.04升级到16.10时出错

来自分类Dev

使IE8适应IE11

来自分类Dev

从汇总11升级到汇总13时出错-已经添加了具有相同密钥的项目

来自分类Dev

从汇总11升级到汇总13时出错-已经添加了具有相同密钥的项目

来自分类Dev

将MFC C ++项目从VS 2008升级到2013时出错

来自分类Dev

将Spring-AMQP从1.2.0升级到1.3.0时出错

来自分类Dev

将Ubuntu 13.04升级到Ubuntu 13.10时出错

来自分类Dev

从0.7升级到0.8.1.1后生成嵌入式kafka队列时出错

来自分类Dev

将GitLab 6.1升级到6.3时出错

来自分类Dev

将Eclipse Kepler SR1升级到SR2时出错?

来自分类Dev

将centos 7.3升级到7.4时出错

来自分类Dev

使用Java 1.8将gwt 2.7升级到2.8时出错

来自分类Dev

从Java 8升级到Java 11 - 包sun.util不存在

来自分类Dev

将Angular 4升级到Angular 8

来自分类Dev

从Angular 8升级到Angular 9的问题

来自分类Dev

在VHD上将Windows 8升级到8.1

来自分类Dev

如何从centos 7升级到centos 8

来自分类Dev

从Windows 8升级到Windows 8.1的问题

来自分类Dev

将Debian 8升级到10

来自分类Dev

从3升级到4时的Rails范围

来自分类Dev

将Debian从7.3升级到7.5(不升级到7.9或8)

来自分类Dev

从1.9.4升级到2.0.1时移动Neo4J数据库时出错

来自分类Dev

将Rails从5.0.0.rc1升级到5.0.0.rc2时出错

来自分类Dev

将IBM MobileFirst Platform服务器从v7.1升级到v8.0时出错

来自分类Dev

将Blazor从3.1升级到5.0时出错“没有与名称'PreferExactMatches'匹配的属性”

来自分类Dev

从17.10升级到18.04时出错(shim签名和grub-efi-amd64签名)

来自分类Dev

将IBM MobileFirst Platform服务器从v7.1升级到v8.0时出错

Related 相关文章

热门标签

归档