2016-01-23 66 views
3

我正在從IE8升級到IE11。我的工作主要是解決CSS錯誤,但我也遇到了JavaScript的一些問題。從IE8升級到IE11時出錯

在我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運行正常,它不斷失敗。經過調試,我發現在兩個版本的IE中,data變量的值不同。

在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\">\ 

(對不起,我不能照搬全的內容,因爲這將是太長了。)

據我瞭解,在datagetID.do產生,但是當我使用調試模式,似乎這個網頁是永遠ACCE ssed。

data這是什麼形式?爲什麼兩個瀏覽器版本有差異?

UPDATE:

使用招,我發現兩個IE版本發送相同的請求的動作:

POST /src/getID.do HTTP/1.1 

在IE8,與一個JSON內容和HTTP代碼的服務器響應as 200

但是在IE11中,響應的http代碼是302,這是什麼意思?

+0

'toFullPath()'函數返回什麼? (IE11中的部分行爲不同,導致它向錯誤的URL發出請求?) – nnnnnn

+0

@nnnnnn它將返回域,例如:當前子域爲'src','toFullPath('/ getID .do')'會返回'src/getID.do',我檢查了粗體IE版本,它們返回的是相同的url – NeedAnswers

+0

對不起,它會返回'/ src/getID.do' – NeedAnswers

回答

1

創建它。

這是導致問題的用戶代理字符串。解決方法是修改服務器上的代碼以檢查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; 
} 
+0

「以及」?這意味着你正在服務器上執行用戶代理嗅探,但忽略提及任何事情? –

+0

@ErikFunkenbusch老實說,我不知道「他們」如何將'user-agent'字符串傳輸到服務器(一個.java文件,我只能通過運行而不是通過調試發現)來進行處理,所以我只添加了一個正則表達式以確定'用戶代理'是否是IE11。 – NeedAnswers

相關問題