Javascript 从IE8升级到IE11时出错
我正在做一个从IE8到IE11的迁移项目。我的工作主要是修复CSS错误,但我也遇到了一些JavaScript问题 在我的Javascript 从IE8升级到IE11时出错,javascript,jquery,internet-explorer-8,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 ,dat
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>
但在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\">\
在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;
}
toFullPath()
函数返回什么?(是不是IE11中行为不同的部分导致它向错误的url发出请求?@nnnnnn它将返回域,例如:当前子域是src
,toFullPath('/getID.do')
将返回src/getID.do
,我选中了粗体IE验证,它们返回相同的URL,很抱歉它将返回/src/getID.do
我也编辑了这个问题,脚本在IE8/9中运行良好/10@nnnnnn在进一步研究之后,我提到的子域是上下文根
:return$.appconf.contextRoot+actionpath代码>“也是”?这意味着你正在服务器上进行用户代理嗅探,但却忽略了提及这一点?@ErikFunkenbusch老实说,我不知道“他们”如何将用户代理
字符串传输到服务器(一个.java文件,我只是通过运气而不是调试发现的)进行处理,因此,我只添加了一个regex来确定用户代理是否为IE11。
POST /src/getID.do HTTP/1.1
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;
}