0

問題很簡單:我需要IE的版本。如果是7或更早,我想重定向。除IE 8訪問頁面外,下面的代碼適用於所有情況。如果IE 8未從7升級,它將工作。但是,如果已升級,則返回的值仍爲7,即使關於Internet Explorer幫助頁面顯示版本爲8.0.etc。 我被卡住了。有任何想法嗎?檢測IE 7和8問題

var BrowserDetect = { 
init: function() { 
    this.browser = this.searchString(this.dataBrowser) || "An unknown browser"; 
    this.version = this.searchVersion(navigator.userAgent) 
     || this.searchVersion(navigator.appVersion) 
     || "an unknown version"; 
    this.OS = this.searchString(this.dataOS) || "an unknown OS"; 
}, 
searchString: function (data) { 
    for (var i = 0; i < data.length; i++) { 
     var dataString = data[i].string; 
     var dataProp = data[i].prop; 
     this.versionSearchString = data[i].versionSearch || data[i].identity; 
     if (dataString) { 
      if (dataString.indexOf(data[i].subString) != -1) 
       return data[i].identity; 
     } 
     else if (dataProp) 
      return data[i].identity; 
    } 
}, 
searchVersion: function (dataString) { 
    var index = dataString.indexOf(this.versionSearchString); 
    if (index == -1) return; 
    return parseFloat(dataString.substring(index + this.versionSearchString.length + 1)); 
}, 
dataBrowser: [ 
    { 
     string: navigator.userAgent, 
     subString: "Chrome", 
     identity: "Chrome" 
    }, 
    { string: navigator.userAgent, 
     subString: "OmniWeb", 
     versionSearch: "OmniWeb/", 
     identity: "OmniWeb" 
    }, 
    { 
     string: navigator.vendor, 
     subString: "Apple", 
     identity: "Safari", 
     versionSearch: "Version" 
    }, 
    { 
     prop: window.opera, 
     identity: "Opera" 
    }, 
    { 
     string: navigator.vendor, 
     subString: "iCab", 
     identity: "iCab" 
    }, 
    { 
     string: navigator.vendor, 
     subString: "KDE", 
     identity: "Konqueror" 
    }, 
    { 
     string: navigator.userAgent, 
     subString: "Firefox", 
     identity: "Firefox" 
    }, 
    { 
     string: navigator.vendor, 
     subString: "Camino", 
     identity: "Camino" 
    }, 
    {  // for newer Netscapes (6+) 
     string: navigator.userAgent, 
     subString: "Netscape", 
     identity: "Netscape" 
    }, 
    { 
     string: navigator.userAgent, 
     subString: "MSIE", 
     identity: "Explorer", 
     versionSearch: "MSIE" 
    }, 
    { 
     string: navigator.userAgent, 
     subString: "Gecko", 
     identity: "Mozilla", 
     versionSearch: "rv" 
    }, 
    {  // for older Netscapes (4-) 
     string: navigator.userAgent, 
     subString: "Mozilla", 
     identity: "Netscape", 
     versionSearch: "Mozilla" 
    } 
], 
dataOS: [ 
    { 
     string: navigator.platform, 
     subString: "Win", 
     identity: "Windows" 
    }, 
    { 
     string: navigator.platform, 
     subString: "Mac", 
     identity: "Mac" 
    }, 
    { 
     string: navigator.userAgent, 
     subString: "iPhone", 
     identity: "iPhone/iPod" 
    }, 
    { 
     string: navigator.platform, 
     subString: "Linux", 
     identity: "Linux" 
    } 
] 

}; 
BrowserDetect.init(); 


var x = (BrowserDetect.browser); 
var y = (BrowserDetect.version); 
var z = (BrowserDetect.OS); 

Y還可以返回版本等於7,當IE其實是8。但是,這只是發生在IE 8時,它已經從IE 7升級它的駕駛我堅果。爲什麼沒有看到當前瀏覽器相當於8 ...

+0

你看着有條件HTML註釋? http://msdn.microsoft.com/en-us/library/ms537512%28v=vs.85%29.aspx – SmokeyPHP

+1

您是否意識到IE8可以像IE7一樣運行?這就是你想要看到的。使用F12並查看它運行的是什麼模式。 – epascarello

+0

我在aspx中運行,但檢查很清楚,在js中完成。哪一個先發生? – user1585004

回答

3

如果你絕對必須檢測瀏覽器,使用conditional comments僅定位到IE:

<!--[if lte IE 7]> 
    <script type="text/javascript"> 
     window.location.href = "http://www.go-away-ie7.com/" 
    </script> 
<![endif]--> 
+3

Aww,'http:// www.go-away-ie7.com'不是一個真實的網站=( –

+0

因此,如果瀏覽器運行兼容性模式(我已經通過上述計算出一個),那麼將這解決這個問題嗎?它會決定IE8在IE7兼容模式下運行,還是繼續執行IE8瀏覽器上的IE7特定代碼? – user1585004

+0

@ user1585004:不知道,我沒有運行Windows ATM, t很難讓你測試 – Blender