Phát hiện Internet Explorer 11


125

Tôi biết IE 11 có chuỗi tác nhân người dùng khác với tất cả các IE khác

 Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv 11.0) like Gecko

Tôi đã cố gắng phát hiện IE 11 với câu trả lời được chỉ định cho câu hỏi này '

Jquery không phát hiện được IE 11

Đó là !!navigator.userAgent.match(/Trident\/7\./)

Nhưng tôi đang gặp lỗi Object not found and needs to be re-evaluated.

Sau đó, tôi mở bảng điều khiển dành cho nhà phát triển trong IE11 và cố gắng truy cập vào một số đối tượng javascript được xác định trước, tôi vẫn gặp lỗi tương tự.

Tôi đã thử

navigator.userAgent

window.navigator

console.log('test');

Bất cứ ai có bất kỳ ý tưởng về nó?


@Bobkhin Tôi đã đề cập ở trên vấn đề của mình. gặp lỗiObject not found and needs to be re-evaluated.
Miqdad Ali


Câu trả lời:


188

Chỉnh sửa ngày 18 tháng 11 năm 2016

Mã này cũng hoạt động ( đối với những người thích giải pháp khác, không sử dụng ActiveX )

var isIE11 = !!window.MSInputMethodContext && !!document.documentMode;
  // true on IE11
  // false on Edge and other IEs/browsers.

Câu trả lời gốc

Để kiểm tra Ie11, bạn có thể sử dụng cái này: (đã kiểm tra)

(hoặc chạy cái này )

!(window.ActiveXObject) && "ActiveXObject" in window

Tôi có tất cả VMS của IE:

nhập mô tả hình ảnh ở đây

nhập mô tả hình ảnh ở đây

nhập mô tả hình ảnh ở đây

nhập mô tả hình ảnh ở đây

Lưu ý: điều này sẽ không hoạt động cho IE11:

như bạn có thể thấy ở đây, nó trả về true:

nhập mô tả hình ảnh ở đây

Vậy chúng ta có thể làm gì :

Rõ ràng, họ đã thêm không gian bit máy:

tức là11:

"Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; .NET4.0E; .NET4.0C; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET CLR 3.0.30729; rv:11.0) like Gecko"

tức là 12:

"Mozilla/5.0 (Windows NT 6.3; Win64; x64; Trident/7.0; .NET4.0E; .NET4.0C; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET CLR 3.0.30729; rv:11.0) like Gecko"

vì vậy chúng tôi có thể làm:

/x64|x32/ig.test(window.navigator.userAgent)

điều này sẽ chỉ trả về true cho ie11.


1
@Tháng một. Đúng. chỉ IE11 mới trả về true cho toàn bộ điều kiện này. Tôi chỉ cho thấy rằng <11 return false.
Royi Namir

1
@IanSteffy Đây chỉ là để hiển thị kết quả (!) Của hoạt động. Bạn có thể mở một tệp HTML và thêm thẻ script và chạy lệnh bên trong script đó. Ở đây chạy cái này .
Royi Namir

2
x64trả lại cả Chrome và Edge
Gene R

3
Chờ đã, có IE12? Tôi nghĩ IE11 là cái cuối cùng và chúng ta sẽ sớm không phải lo lắng về trình duyệt ngu ngốc đó nữa! ☹
Michael Scheper

1
Liệu không làm việc cho IE 11.0.9600.19431 của tôi trên Windows 7 Enterprise. Không có window.MSInputMethodContext.
Heinrich Ulbricht

105

Để phát hiện MSIE (từ phiên bản 6 đến 11) một cách nhanh chóng:

if(navigator.userAgent.indexOf('MSIE')!==-1
|| navigator.appVersion.indexOf('Trident/') > -1){
   /* Microsoft Internet Explorer detected in. */
}

2
Nên không phải là thứ hai indexOf()được > -1?
cải cách

Yeah, tôi không biết tại sao nó> 0 và không> -1, nhưng "Trident /" show lên xa hơn vào chuỗi appVersion anyways-
chrismarx

22

Tôi sử dụng chức năng sau để phát hiện phiên bản 9, 10 và 11 của IE:

function ieVersion() {
    var ua = window.navigator.userAgent;
    if (ua.indexOf("Trident/7.0") > -1)
        return 11;
    else if (ua.indexOf("Trident/6.0") > -1)
        return 10;
    else if (ua.indexOf("Trident/5.0") > -1)
        return 9;
    else
        return 0;  // not IE9, 10 or 11
}  

21

Tất cả các câu trả lời trên đều bỏ qua thực tế là bạn đề cập đến việc bạn không có cửa sổ hoặc bộ điều hướng :-)

Sau đó, tôi mở bảng điều khiển dành cho nhà phát triển trong IE11

và đó là nơi nó nói

Đối tượng không được tìm thấy và cần được đánh giá lại.

và bộ điều hướng, cửa sổ, bảng điều khiển, không có cái nào trong số chúng tồn tại và cần được đánh giá lại. Tôi đã có điều đó trong cuộc thi đua. chỉ cần đóng và mở bảng điều khiển một vài lần.


5
lòng tốt, cảm ơn bạn đã thực sự đọc câu hỏi và trả lời vấn đề với đánh giá lại.
marknadal

8
Làm việc cho tôi quá. Đây là lý do tại sao sẽ có tiệc tùng trên khắp thế giới khi IE chết.
voltrevo

Việc đóng và mở bảng điều khiển đã làm việc cho tôi. Hành vi kỳ lạ so với Firefox hoặc Chrome (nhưng nó IE, do đó con số.)
Ectropy

7

Một cách khá an toàn và ngắn gọn để chỉ phát hiện IE 11

if(window.msCrypto) { /* I'm IE11 for sure */ }

hoặc thứ gì đó giống thế này
var IE11= !!window.msCrypto;


msCryptolà phiên bản có tiền tố của window.cryptođối tượng và chỉ được triển khai trong IE 11.
https://developer.mozilla.org/en-US/docs/Web/API/Window/crypto


Giải pháp làm việc duy nhất (đó là giải pháp ngắn nhất, sạch nhất và thanh lịch nhất)! Royi Namir cũng /x64|x32/ig.test(window.navigator.userAgent)áp dụng cho Firefox!
Sándor Zuboly

4

Và cách tôi thực hiện điều này

<script type="text/javascript">
  !(window.ActiveXObject) && "ActiveXObject"
  function isIE11(){
    return !!navigator.userAgent.match(/Trident.*rv[ :]*11\./);
  }
</script>

1
Tôi nghĩ rằng bạn có một lỗi đánh máy trong chức năng của bạn. Đầu tiên, bạn kiểm tra điều kiện, điều kiện nào chưa được sử dụng. Thứ hai, có lẽ ý bạn là && "ActiveXObject" in window. Thứ ba: mẹo gì với phủ định kép !!?
dma_k

1
!! khá nhiều nghĩa là 'Ép buộc thành boolean'.
Andrew Grey

4

Được rồi, hãy thử cái này, đơn giản và dành cho IE11 và IE phiên bản dưới 11

browserIsIE = navigator.userAgent.toUpperCase().indexOf("TRIDENT/") != -1 || navigator.userAgent.toUpperCase().indexOf("MSIE") != -1;

navigator.userAgent.toUpperCase().indexOf("TRIDENT/") != -1cho phiên bản IE 11 navigator.userAgent.toUpperCase().indexOf("MSIE") != -1dành cho phiên bản IE dưới 11

browserIsIE = navigator.userAgent.toUpperCase().indexOf("TRIDENT/") != -1 || navigator.userAgent.toUpperCase().indexOf("MSIE") != -1;

console.log('Is IE Browser : '+ browserIsIE)


2

Liên kết này hữu ích . Nó chứa mã javascript để phát hiện tất cả các phiên bản của IE cho đến IE11. Tôi đã thử nghiệm tập lệnh với trình giả lập IE11. Để tìm trình giả lập IE11, nhấp chuột phải vào trình duyệt web, nhấp vào "Kiểm tra phần tử". Ở dưới cùng bên trái của trang, cuộn xuống thanh điều hướng và nhấp vào biểu tượng màn hình. Hộp thả xuống "Chuỗi tác nhân người dùng" chứa các tùy chọn để mô phỏng IE6-11.

Nó hoạt động. Tôi chỉ sử dụng nó vài phút trước khi viết câu trả lời này. Không thể đăng ảnh chụp nhanh - không đủ danh tiếng.


Đây là mã - hãy nhấp vào liên kết để xem lại:

// Get IE or Edge browser version
var version = detectIE();

if (version === false) {
  document.getElementById('result').innerHTML = '<s>IE/Edge</s>';
} else if (version >= 12) {
  document.getElementById('result').innerHTML = 'Edge ' + version;
} else {
  document.getElementById('result').innerHTML = 'IE ' + version;
}

// add details to debug result
document.getElementById('details').innerHTML = window.navigator.userAgent;

/**
 * detect IE
 * returns version of IE or false, if browser is not Internet Explorer
 */
function detectIE() {
  var ua = window.navigator.userAgent;

  // Test values; Uncomment to check result …

  // IE 10
  // ua = 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0)';

  // IE 11
  // ua = 'Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko';

  // Edge 12 (Spartan)
  // ua = 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36 Edge/12.0';

  // Edge 13
  // ua = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2486.0 Safari/537.36 Edge/13.10586';

  var msie = ua.indexOf('MSIE ');
  if (msie > 0) {
    // IE 10 or older => return version number
    return parseInt(ua.substring(msie + 5, ua.indexOf('.', msie)), 10);
  }

  var trident = ua.indexOf('Trident/');
  if (trident > 0) {
    // IE 11 => return version number
    var rv = ua.indexOf('rv:');
    return parseInt(ua.substring(rv + 3, ua.indexOf('.', rv)), 10);
  }

  var edge = ua.indexOf('Edge/');
  if (edge > 0) {
    // Edge (IE 12+) => return version number
    return parseInt(ua.substring(edge + 5, ua.indexOf('.', edge)), 10);
  }

  // other browser
  return false;
}
@import url(https://fonts.googleapis.com/css?family=Fira+Mono|Fira+Sans:300);
body {
  color: black;
  background-color: white;
  font-family: "Fira Sans", sans-serif;
  font-weight: 300;
  margin: 0;
  padding: 3rem;
}

h1 {
  color: darkgrey;
  text-align: center;
  font-weight: 300;
  font-size: 1.5rem;
  line-height: 2rem;
}

h2 {
  text-align: center;
  font-weight: 300;
  font-size: 4rem;
}

p {
  color: darkgrey;
  text-align: center;
  font-family: "Fira Mono", monospace;
  font-size: 1rem;
  line-height: 1.5rem;
}
<h1>Detect IE/Edge version with JavaScript.<br> Updated to recognize Internet Explorer 12+ aka Edge.</h1>
<h2 id="result">detecting…</h2>
<p id="details">n/a</p>


1

Sử dụng RegExp này có vẻ hoạt động cho IE 10 và IE 11:

function isIE(){
    return /Trident\/|MSIE/.test(window.navigator.userAgent);
}

Tôi không có IE cũ hơn IE 10 để kiểm tra điều này.


0

Sử dụng Navigator: -

Đây navigatorlà một đối tượng chứa tất cả thông tin về trình duyệt của máy khách.

navigator.appName trả về tên trình duyệt của máy khách.

navigator.appName === 'Microsoft Internet Explorer' ||  !!(navigator.userAgent.match(/Trident/) || navigator.userAgent.match(/rv:11/)) || (typeof $.browser !== "undefined" && $.browser.msie === 1) ? alert("Please dont use IE.") : alert("This is not IE")
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>


1
appName là Netscape trên IE 11. Họ đã làm mọi cách để lừa các nhà phát triển.
kagronick

0

Tôi thấy IE11 đang cung cấp nhiều chuỗi tác nhân người dùng trong các môi trường khác nhau.

Thay vì dựa vào MSIEvà các cách tiếp cận khác, Tốt hơn là nên dựa vào Tridentphiên bản

const isIE11 = userAgent => userAgent.match(/Trident\/([\d.]+)/) ? +userAgent.match(/Trident\/([\d.]+)/)[1] >= 7;

Hi vọng điêu nay co ich :)

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.