13

Tôi có một số đường dẫn mã cụ thể cho IE 10 và phần còn lại của các phiên bản IE. Nếu IE10 đang chạy ở chế độ tương thích, phiên bản trình duyệt được đặt thành 7.0. Có cách nào để phát hiện nếu nó là IE 10 không phụ thuộc vào chế độ tiêu chuẩn/khả năng tương thích sử dụng JavaScript/JQuery?Phát hiện chế độ tương thích IE10

+1

toàn bộ các điểm chế độ tương thích là nó là nghĩa vụ phải được giả vờ là IE7, vì vậy tất cả các phiên bản bình thường phát hiện thủ thuật sẽ nói 'IE7'. Điều đó nói rằng, có một vài thủ thuật mà bạn có thể sử dụng và một số câu hỏi tương tự ở đây có thể đã cung cấp câu trả lời ... Xem http://stackoverflow.com/questions/1328963/detect-ie8-compatibility-mode, http: //stackoverflow.com/questions/5825385/javascript-can-i-detect-ie9-if-its-in-ie7-or-ie8-compatibility-mode, v.v. (Tôi biết đó là dành cho IE8 và IE9, nhưng có thể một số mẹo có thể giúp ích?) – Spudley

+1

@Spudley, đinh ba là cách phát hiện tôi đoán. – ABC

+1

không quan tâm, tại sao bạn lại cần phát hiện chế độ compat? Bạn có thể tránh để người dùng chạy ở chế độ tương thích bằng cách sử dụng các thẻ meta thích hợp, vì vậy tôi không biết tại sao bạn cần phải phát hiện ra nó. – Spudley

Trả lời

5

Trident giá trị trong chuỗi tác nhân người dùng chỉ ra phiên bản thực tế của IE được chạy.

+0

Trừ khi tất nhiên, IE11 thay đổi cách thức hoạt động của nó. – Matthew

19

Bạn có thể phát hiện này bằng cách sử dụng chuỗi navigator.userAgent, ví dụ

"Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.2; WOW64; Trident/6.0; .NET4.0E;. NET4.0C; InfoPath.3; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET CLR 3.0.30729; Zune 4.7)"

Trident/6.0 có nghĩa IE10

MSIE 7.0 có nghĩa là compatibilit chế độ y

Thông tin chi tiết: https://stackoverflow.com/a/5825518/255654

+0

Cảm ơn, tôi hiểu nó. – ABC

+0

Tôi nghĩ đây là câu trả lời rõ ràng hơn. –

+4

Nếu bạn đặt nó trong chế độ xem compat thông qua các công cụ dev, điều này có vẻ đúng. Nếu nó được đưa vào chế độ xem tương thích vì Cài đặt Chế độ xem Tương thích trong trình đơn Công cụ (ví dụ: theo tên miền), nó có vẻ như sử dụng các tiêu chuẩn bình thường userAgent. –

5

Đây là những gì tôi sử dụng từ JQuery .ready

$(document).ready(function() { 
    var iec = new IECompatibility(); 
    alert('IsIE: ' + iec.IsIE + '\nVersion: ' + iec.Version + '\nCompatability On: ' + iec.IsOn); 
    }); 

    function IECompatibility() { 
    var agentStr = navigator.userAgent; 
    this.IsIE = false; 
    this.IsOn = undefined; //defined only if IE 
    this.Version = undefined; 

    if (agentStr.indexOf("MSIE 7.0") > -1) { 
     this.IsIE = true; 
     this.IsOn = true; 
     if (agentStr.indexOf("Trident/6.0") > -1) { 
     this.Version = 'IE10'; 
     } else if (agentStr.indexOf("Trident/5.0") > -1) { 
     this.Version = 'IE9'; 
     } else if (agentStr.indexOf("Trident/4.0") > -1) { 
     this.Version = 'IE8'; 
     } else { 
     this.IsOn = false; // compatability mimics 7, thus not on 
     this.Version = 'IE7'; 
     } 
    } //IE 7 
    } 

Bến Hobgood

+0

Tôi tin rằng mã của bạn chỉ đặt Isie và Phiên bản nếu chế độ tương thích được phát hiện trong chuỗi UA. Điều đó có chủ ý không? – ifugu

11

này nên làm việc phát hiện chế độ tương thích cho MSIE.

iecheck.js

function trueOrFalse() { 
    return true; 
} 

function IeVersion() { 
    //Set defaults 
    var value = { 
     IsIE: false, 
     TrueVersion: 0, 
     ActingVersion: 0, 
     CompatibilityMode: false 
    }; 

    //Try to find the Trident version number 
    var trident = navigator.userAgent.match(/Trident\/(\d+)/); 
    if (trident) { 
     value.IsIE = true; 
     //Convert from the Trident version number to the IE version number 
     value.TrueVersion = parseInt(trident[1], 10) + 4; 
    } 

    //Try to find the MSIE number 
    var msie = navigator.userAgent.match(/MSIE (\d+)/); 
    if (msie) { 
     value.IsIE = true; 
     //Find the IE version number from the user agent string 
     value.ActingVersion = parseInt(msie[1]); 
    } else { 
     //Must be IE 11 in "edge" mode 
     value.ActingVersion = value.TrueVersion; 
    } 

    //If we have both a Trident and MSIE version number, see if they're different 
    if (value.IsIE && value.TrueVersion > 0 && value.ActingVersion > 0) { 
     //In compatibility mode if the trident number doesn't match up with the MSIE number 
     value.CompatibilityMode = value.TrueVersion != value.ActingVersion; 
    } 
    return value; 
} 

iecheck.html

<!DOCTYPE html> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
    <title>Testing IE Compatibility Mode</title> 
    <script src="iecheck.js" type="text/javascript"></script> 
</head> 
<body> 
<div id="results">Results: </div> 
</br> 
<script type="text/javascript"> 

var ie = IeVersion(); 

document.write("IsIE: " + ie.IsIE + "</br>"); 
document.write("TrueVersion: " + ie.TrueVersion + "</br>"); 
document.write("ActingVersion: " + ie.ActingVersion + "</br>"); 
document.write("CompatibilityMode: " + ie.CompatibilityMode + "</br>"); 

</script> 
</body> 
</html> 
Các vấn đề liên quan