javascript - 从 IE8 升级到 IE11 时出错

标签 javascript jquery internet-explorer-8

我正在进行从 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 生成,但是当我使用 Debug模式时,似乎从未访问过此页面。

这个数据来自哪里?为什么两个浏览器版本有差异?

更新:

使用 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;
}

关于javascript - 从 IE8 升级到 IE11 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34959846/

相关文章:

css - 无法让 css 'content' 属性在 ie8 中工作

javascript - 用于在 Angular 项目中进行测试的构建或管道。 Protractor 问题

jQuery:从 iframe 本身访问 iframe dom

html - IE8 标准模式元标记

html - IE 忽略 !important CSS 中的标签

javascript - 使用 jQuery 追加元素与 CSS 转换延迟同步

javascript - 从包含大量 Javascript 的网页中抓取屏幕

lazy-loading - 如果浏览器禁用了 JavaScript,是否仍会请求 .js 文件?

javascript - 切换div问题

javascript - 页面到达某个点后停止页面滚动