Kiểm tra xem người dùng có đang sử dụng IE không


391

Tôi đang gọi một hàm như hàm dưới đây bằng cách nhấp vào div với một lớp nhất định.

Có cách nào tôi có thể kiểm tra khi khởi động chức năng nếu người dùng đang sử dụng Internet Explorer và hủy bỏ / hủy bỏ nếu họ đang sử dụng các trình duyệt khác để nó chỉ chạy cho người dùng IE không? Tất cả người dùng ở đây sẽ ở trên IE8 hoặc các phiên bản cao hơn vì vậy tôi không cần phải bao gồm IE7 và các phiên bản thấp hơn.

Nếu tôi có thể biết trình duyệt nào họ đang sử dụng thì sẽ rất tuyệt nhưng không bắt buộc.

Hàm ví dụ:

$('.myClass').on('click', function(event)
{
    // my function
});

1
Sử dụng hiện đại hóa để phát hiện IE hoặc các trình duyệt khác. stackoverflow.com/questions/13478303/ Lời
chris

7
Theo các tiêu chuẩn phát triển web hiện đại, bắt đầu thực hiện các phiên bản IE cũ.
Rosseyn

7
Trên thực tế, "thực hành xấu" này bị ép buộc bởi chính các tiêu chuẩn, do đó, đó không phải là lỗi của nhà phát triển ... Trình duyệt hoạt động khác nhau và thông số kỹ thuật quá mềm đối với các vấn đề triển khai. Để làm cho một cái gì đó không có lỗi và không nhàm chán như địa ngục, người ta phải phát hiện trình duyệt. Tôi sẽ đề nghị một thực hành tốt nhất khác : With modern web development, it's bad practice to support non-Chromium-based browsers (with Safari not considered to be Chromium-based at all). Xin lỗi, nhưng sự điên rồ này phải kết thúc vào một lúc nào đó và bằng cách nào đó ...
user2173353

2
Hôm nay tốt hơn là thực hiện "phát hiện tính năng" trên "phát hiện trình duyệt". Hỏi xem trình duyệt có làm những gì bạn cần thay thế không.
Chris Rogers

2
@Chris - lời xin lỗi ... có nghĩa là để có nhiều âm điệu jokey hơn. Tôi sẽ đổ lỗi cho IE vì đã đánh cắp niềm vui của tôi và để lại cho tôi sự cay đắng và thất vọng. :)
JDB vẫn còn nhớ Monica

Câu trả lời:


477

Sử dụng phương pháp JavaScript bên dưới:

function msieversion() 
{
    var ua = window.navigator.userAgent;
    var msie = ua.indexOf("MSIE ");

    if (msie > 0) // If Internet Explorer, return version number
    {
        alert(parseInt(ua.substring(msie + 5, ua.indexOf(".", msie))));
    }
    else  // If another browser, return 0
    {
        alert('otherbrowser');
    }

    return false;
}

Bạn có thể tìm thấy các chi tiết bên dưới trang web hỗ trợ của Microsoft:

Cách xác định phiên bản trình duyệt từ tập lệnh

Cập nhật: (Hỗ trợ IE 11)

function msieversion() {

    var ua = window.navigator.userAgent;
    var msie = ua.indexOf("MSIE ");

    if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./))  // If Internet Explorer, return version number
    {
        alert(parseInt(ua.substring(msie + 5, ua.indexOf(".", msie))));
    }
    else  // If another browser, return 0
    {
        alert('otherbrowser');
    }

    return false;
}

27
Mặc dù điều này sẽ hoạt động tốt vì biến ua sẽ không bao giờ bắt đầu với MSIE, viết if (msie > 0)là sai. Nếu không tìm thấy giá trị, hàm indexOf () trả về -1 chứ không phải 0. Do đó if (msie > -1)sẽ có nhiều giải thích hơn.
Neville Nazerane

61
Điều này trả về NaN trong IE11, đối với tôi.
phán đoán

7
@verism và những người khác: kiểm tra câu trả lời này cũng hoạt động cho IE 11: stackoverflow.com/a/21712356/114029
Leniel Maccaferri

8
hoa tiêu.userAgent.indexOf ("MSIE")> 0 || hoa tiêu.userAgent.indexOf ("Cây đinh ba")> 0 || navigator.userAgent.indexOf ("Edge")> 0
tylermauthe

12
/Edge\/|Trident\/|MSIE /.test(window.navigator.userAgent)Tôi biết điều này hoạt động vào ngày 10 và 11. Nếu bạn có thể xác minh <IE9 và Edge, hãy chỉnh sửa câu trả lời.
Mất

595

Vài năm sau, và trình duyệt Edge hiện sử dụng Chromium làm công cụ kết xuất.
Kiểm tra IE 11 vẫn còn là một điều đáng buồn.

Đây là một cách tiếp cận đơn giản hơn, vì các phiên bản IE cổ sẽ không còn nữa.

if (window.document.documentMode) {
  // Do IE stuff
}

Đây là câu trả lời cũ của tôi (2014):

Trong Edge, Chuỗi tác nhân người dùng đã thay đổi.

/**
 * detect IEEdge
 * returns version of IE/Edge or false, if browser is not a Microsoft browser
 */
function detectIEEdge() {
    var ua = window.navigator.userAgent;

    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 => return version number
       return parseInt(ua.substring(edge + 5, ua.indexOf('.', edge)), 10);
    }

    // other browser
    return false;
}

Sử dụng mẫu:

alert('IEEdge ' + detectIEEdge());

Chuỗi mặc định của IE 10:

Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0)

Chuỗi mặc định của IE 11:

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

Chuỗi mặc định của Edge 12:

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 

Chuỗi mặc định của Edge 13 (thx @DrCord):

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 

Chuỗi mặc định của Edge 14:

Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2486.0 Safari/537.36 Edge/14.14300 

Chuỗi mặc định của Edge 15:

Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36 Edge/15.15063 

Chuỗi mặc định của Edge 16:

Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 Edge/16.16299 

Chuỗi mặc định của Edge 17:

Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36 Edge/17.17134 

Chuỗi mặc định của Edge 18 (xem trước nội bộ):

Mozilla/5.0 (Windows NT 10.0; Win64; x64; ServiceUI 14) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36 Edge/18.17730 

Kiểm tra tại CodePen:

http://codepen.io/gapcode/pen/vEJNZN


4
Cảm ơn bạn đã bình luận. Tôi chưa xác minh câu trả lời của bạn, nhưng tôi muốn bình luận một điều: Là 'nếu' đầu tiên có chứa 'trả lại', bạn không cần một 'người khác' sau đó.
Mario

30
Chỉ tò mò, tại sao họ lại thay đổi dòng tác nhân người dùng trong các phiên bản IE mới? MS nghiêm túc không muốn chúng tôi phát hiện trình duyệt web khủng khiếp của họ.
c00000fd

3
@SameerAlibhai Nghe có vẻ hay trên lý thuyết nhưng thực tế, đặc biệt là hiện tại, nó không thực tế. Đôi khi các vấn đề phát sinh là một phát hiện "tính năng" duy nhất không bao gồm và cộng với một số tính năng nhất định có các yêu cầu triển khai chỉ có thể được xử lý xung quanh với kiến ​​thức về trình duyệt. Điều gì xảy ra nếu tôi muốn làm một cái gì đó đơn giản như thu thập số liệu thống kê trình duyệt?
Nhẹ

34
Cần lưu ý rằng Edge không thực sự là 'IE12' nhưng thực tế là một trình duyệt hoàn toàn riêng biệt. Windows 10 đi kèm với cả IE11 và Edge được cài đặt.
moloko

16
lòng căm thù đối với IE của tôi tăng lên
Kolob Canyon

135

Nếu tất cả những gì bạn muốn biết là trình duyệt có phải là IE hay không, bạn có thể làm điều này:

var isIE = false;
var ua = window.navigator.userAgent;
var old_ie = ua.indexOf('MSIE ');
var new_ie = ua.indexOf('Trident/');

if ((old_ie > -1) || (new_ie > -1)) {
    isIE = true;
}

if ( isIE ) {
    //IE specific code goes here
}

Cập nhật 1: Một phương pháp tốt hơn

Tôi đề nghị điều này bây giờ. Nó vẫn rất dễ đọc và ít mã hơn :)

var ua = window.navigator.userAgent;
var isIE = /MSIE|Trident/.test(ua);

if ( isIE ) {
  //IE specific code goes here
}

Cảm ơn JohnnyFun trong các bình luận cho câu trả lời rút gọn :)

Cập nhật 2: Kiểm tra IE trong CSS

Đầu tiên, nếu có thể, bạn nên sử dụng các @supportscâu lệnh thay vì JS để kiểm tra xem trình duyệt có hỗ trợ một tính năng CSS nào đó không.

.element {
  /* styles for all browsers */
}

@supports (display: grid) {
  .element {
    /* styles for browsers that support display: grid */
  }
}

(Lưu ý rằng IE hoàn toàn không hỗ trợ @supportsvà sẽ bỏ qua mọi kiểu được đặt trong @supportscâu lệnh.)

Nếu vấn đề không thể được giải quyết @supportsthì bạn có thể làm điều này:

// JS

var ua = window.navigator.userAgent;
var isIE = /MSIE|Trident/.test(ua);

if ( isIE ) {
  document.documentElement.classList.add('ie')
}
/* CSS */

.element {
  /* styles that apply everywhere */
}

.ie .element {
  /* styles that only apply in IE */
}

(Lưu ý: classListtương đối mới đối với JS và tôi nghĩ, trong số các trình duyệt IE, nó chỉ hoạt động trong IE11. Cũng có thể là IE10.)

Nếu bạn đang sử dụng SCSS (Sass) trong dự án của mình, điều này có thể được đơn giản hóa thành:

/* SCSS (Sass) */

.element {
  /* styles that apply everywhere */

  .ie & {
    /* styles that only apply in IE */
  }
}

Cập nhật 3: Thêm Microsoft Edge (không được khuyến nghị)

Nếu bạn cũng muốn thêm Microsoft Edge vào danh sách, bạn có thể làm như sau. Tuy nhiên tôi không khuyến khích điều đó vì Edge là một trình duyệt có thẩm quyền hơn nhiều so với IE.

var ua = window.navigator.userAgent;
var isIE = /MSIE|Trident|Edge\//.test(ua);

if ( isIE ) {
  //IE & Edge specific code goes here
}

5
Hoặc tương tự trong một vài byte: ms_ie = ~ ua.indexOf ('MSIE') || ~ ua.indexOf ('Cây đinh ba /'); ;-)
Simon Steinberger

12
Phiên bản của tôi có ý nghĩa ngay lập tức hơn nhiều đối với con người nhưng ít byte hơn luôn luôn tốt :)
Daniel Tonon

7
hoặcms_ie = !!ua.match(/MSIE|Trident/)
xori

5
hoặc ms_ie = /MSIE|Trident/.test(ua)
JohnnyFun

1
@SimonSteinberger ~có ý nghĩa gì không?
1,21 gigawatt

45

Điều này trả về truecho bất kỳ phiên bản nào của Internet Explorer:

function isIE(userAgent) {
  userAgent = userAgent || navigator.userAgent;
  return userAgent.indexOf("MSIE ") > -1 || userAgent.indexOf("Trident/") > -1 || userAgent.indexOf("Edge/") > -1;
}

Các userAgenttham số là tùy chọn và mặc định nó để user agent của trình duyệt.


Điều này sẽ tốt nhưng về cơ bản bạn chỉ quên đặt giá trị "return true" hoặc "return 1" mặc định cho các trình duyệt IE. Điều này hiện không trả về bất kỳ giá trị nào khi trình duyệt IE được phát hiện.
Vincent Edward Gedaria Binua

10
Tại sao bạn muốn coi Edge là IE? Về khả năng tương thích, ngày nay chúng có rất ít điểm chung.
minexew

@docta_faustus userAgent là một tham số, không phải là toàn cầu
uốn cong

29

Đây là cách nhóm Angularjs làm việc đó ( v 1.6.5 ):

var msie, // holds major version number for IE, or NaN if UA is not IE.

// Support: IE 9-11 only
/**
 * documentMode is an IE-only property
 * http://msdn.microsoft.com/en-us/library/ie/cc196988(v=vs.85).aspx
 */
msie = window.document.documentMode;

Sau đó, có một số dòng mã nằm rải rác trong khi sử dụng nó như một số như

if (event === 'input' && msie <= 11) return false;

if (enabled && msie < 8) {

window.document.documentMode không được xác định trong MS Edge
Veselin Vasilev

25
nó không được xác định trong MS Edge vì MS Edge không phải là IE!
JCKödel

1
document.documentModeđược hỗ trợ bởi IE8 +. Nó sẽ 'undefined'dành cho Edge hoặc Chrome / FireFox .... Tôi đã thay đổi mã này để var IEver = window.document.documentMode || (window.attachEvent? 1 : 99);nó trả về phiên bản IE chính xác cho IE8 +, 99 cho các trình duyệt không phải IE (thường là trình duyệt hiện đại) và 1 cho IE5-7 cũ. Điều này được viết như vậy bởi vì chúng ta thường chỉ cần làm việc đặc biệt cho một số IE cũ hơn. Vì vậy, if (IEver < 9) { ... }có nghĩa là nếu đó là một IE cũ
S.Serpooshan

29

Bạn có thể sử dụng đối tượng điều hướng để phát hiện trình điều hướng người dùng, bạn không cần jquery cho nó

<script type="text/javascript">

if (/MSIE (\d+\.\d+);/.test(navigator.userAgent) || navigator.userAgent.indexOf("Trident/") > -1 ){ 

 // Do stuff with Internet-Exploders ... :)
}

</script>

http://www.javascriptkit.com/javatutors/navigator.shtml


4
Điều này mang lại cho tôi sai cho IE11 của tôi
Curtis

2
Tác nhân người dùng của IE11 khác với MSIE (XX); IE11 sẽ được tìm thấy bằng cách kiểm tra Trident.
Orpheus

Điều này cho kết quả dương tính giả trong Firefox 45.0.2.
Tim S. Van Haren

sai kiểm tra indexOf trở dont đúng hay sai như chức năng kiểm tra regex bạn có làm navigator.userAgent.indexOf ( "Trident /") = -1!
Dahar Youssef

10

Sử dụng các câu trả lời ở trên; Boolean trở lại đơn giản và cô đọng:

var isIE = /(MSIE|Trident\/|Edge\/)/i.test(navigator.userAgent);


1
Trả về false trong FireFox 44.0.2 trên Widnows 10. Phiên bản nào của FireFox trả về true @ SiKni8?
Arthur Hebert

9

Phương thức 01:
$ .browser không được dùng nữa trong phiên bản jQuery 1.3 và bị xóa trong 1.9

if ( $.browser.msie) {
  alert( "Hello! This is IE." );
}

Phương pháp 02:
Sử dụng nhận xét có điều kiện

<!--[if gte IE 8]>
<p>You're using a recent version of Internet Explorer.</p>
<![endif]-->

<!--[if lt IE 7]>
<p>Hm. You should upgrade your copy of Internet Explorer.</p>
<![endif]-->

<![if !IE]>
<p>You're not using Internet Explorer.</p>
<![endif]>

Phương pháp 03:

 /**
 * Returns the version of Internet Explorer or a -1
 * (indicating the use of another browser).
 */
function getInternetExplorerVersion()
{
    var rv = -1; // Return value assumes failure.

    if (navigator.appName == 'Microsoft Internet Explorer')
    {
        var ua = navigator.userAgent;
        var re  = new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})");
        if (re.exec(ua) != null)
            rv = parseFloat( RegExp.$1 );
    }

    return rv;
}

function checkVersion()
{
    var msg = "You're not using Internet Explorer.";
    var ver = getInternetExplorerVersion();

    if ( ver > -1 )
    {
        if ( ver >= 8.0 ) 
            msg = "You're using a recent copy of Internet Explorer."
        else
            msg = "You should upgrade your copy of Internet Explorer.";
    }

    alert( msg );
}

Phương pháp 04:
Sử dụng JavaScript / Phát hiện thủ công

/*
     Internet Explorer sniffer code to add class to body tag for IE version.
     Can be removed if your using something like Modernizr.
 */
 var ie = (function ()
 {

     var undef,
     v = 3,
         div = document.createElement('div'),
         all = div.getElementsByTagName('i');

     while (
     div.innerHTML = '<!--[if gt IE ' + (++v) + ']><i></i>< ![endif]-->',
     all[0]);

     //append class to body for use with browser support
     if (v > 4)
     {
         $('body').addClass('ie' + v);
     }

 }());

liên kết tham khảo


@radhe Tôi đã cập nhật câu trả lời hy vọng điều này sẽ làm việc cho bạn.
Aamir Shahzad

Lưu ý: Phương pháp 2 sẽ không hoạt động trong IE10 hoặc tốt hơn ở chế độ tiêu chuẩn. Để biết thêm thông tin: Nhận xét có điều kiện không còn được hỗ trợ
insertusernamehere vào

@insertusername Ở đây bạn rất đúng, vì tôi nghĩ rằng việc sử dụng .ie10lớp là một trong những lựa chọn tốt nhất nếu bạn đang thực hiện một số sửa lỗi css cho eg10. Khi trình thám hiểm internet 10 thêm ".ie10"lớp vào phần tử HTML <html class="ie10">, sau đó bạn có thể sử dụng nó như thế.ie10 .myclass {//some css here}
Aamir Shahzad

8

Tôi chỉ muốn kiểm tra xem trình duyệt là IE11 trở lên, bởi vì, chúng thật tào lao.

function isCrappyIE() {
    var ua = window.navigator.userAgent;
    var crappyIE = false;
    var msie = ua.indexOf('MSIE ');
    if (msie > 0) {// IE 10 or older => return version number        
        crappyIE = true;
    }
    var trident = ua.indexOf('Trident/');
    if (trident > 0) {// IE 11 => return version number        
        crappyIE = true;
    }
    return crappyIE;
}   

if(!isCrappyIE()){console.table('not a crappy browser);}

2
điều này nhận được phiếu bầu của tôi vì sự quan tâm cao đối với việc đặt tên theo tiêu chuẩn hội nghị
redbandit

7
function detectIE() {
    var ua = window.navigator.userAgent;
    var ie = ua.search(/(MSIE|Trident|Edge)/);

    return ie > -1;
}

Không trả lời câu hỏi. Cạnh không phải là IE.
hda

hda, ngày câu hỏi từ năm 2013, tôi nghĩ rằng hôm nay, thật thú vị khi không bỏ qua "Edge"
Boss COTIGA

5

Sử dụng Modernizr

Modernizr.addTest('ie', function () {
    var ua = window.navigator.userAgent;
    var msie = ua.indexOf('MSIE ') > 0;
    var ie11 = ua.indexOf('Trident/') > 0;
    var ie12 = ua.indexOf('Edge/') > 0;
    return msie || ie11 || ie12;
});

Không trả lời câu hỏi vì Edge không phải là IE. Ngoài ra Edge không phải là IE12. Khi Edge dựa trên Chromium được phát hành, bạn cũng nên thêm Chrome hoặc Opera vào danh sách này. (Bất cứ điều gì bạn muốn đạt được bằng cách này, việc phát hiện Firefox sẽ dễ dàng hơn)
hda

5

Hoặc phiên bản thực sự ngắn này, trả về đúng nếu các trình duyệt là Internet Explorer:

function isIe() {
    return window.navigator.userAgent.indexOf("MSIE ") > 0
        || !!navigator.userAgent.match(/Trident.*rv\:11\./);
}

4

Một chức năng đơn giản (nhưng có thể đọc được) khác để phát hiện xem trình duyệt có phải là IE hay không (bỏ qua Edge, điều này không tệ chút nào):

function isIE() {
  var ua = window.navigator.userAgent;
  var msie = ua.indexOf('MSIE '); // IE 10 or older
  var trident = ua.indexOf('Trident/'); //IE 11

  return (msie > 0 || trident > 0);
}

3

Nếu bạn không muốn sử dụng useragent, bạn cũng có thể làm điều này để kiểm tra xem trình duyệt có phải là IE không. Mã nhận xét thực sự chạy trong trình duyệt IE và biến "false" thành "true".

var isIE = /*@cc_on!@*/false;
if(isIE){
    //The browser is IE.
}else{
    //The browser is NOT IE.
}   

1
IE11 không hỗ trợ biên dịch có điều kiện
Gabriel Llamas

Tôi chỉ thử điều này và nó vẫn hoạt động. Bạn có chắc là nó không hỗ trợ nó?
dev4life

3

Tôi biết đây là một câu hỏi cũ, nhưng trong trường hợp bất kỳ ai gặp lại nó và gặp vấn đề với việc phát hiện IE11, đây là một giải pháp hiệu quả cho tất cả các phiên bản IE hiện tại.

var isIE = false;
if (navigator.userAgent.indexOf('MSIE') !== -1 || navigator.appVersion.indexOf('Trident/') > 0) {
    isIE = true;   
}

3

tôi đã sử dụng cái này

function notIE(){
    var ua = window.navigator.userAgent;
    if (ua.indexOf('Edge/') > 0 || 
        ua.indexOf('Trident/') > 0 || 
        ua.indexOf('MSIE ') > 0){
       return false;
    }else{
        return true;                
    }
}

2

Nhiều câu trả lời ở đây và tôi muốn thêm đầu vào của mình. IE 11 là một ass như vậy liên quan đến flexbox (xem tất cả các vấn đề và sự không nhất quán của nó ở đây ) rằng tôi thực sự cần một cách dễ dàng để kiểm tra xem người dùng có đang sử dụng bất kỳ trình duyệt IE nào không (ngoại trừ và bao gồm 11) nhưng ngoại trừ Edge khá đẹp.

Dựa trên các câu trả lời được đưa ra ở đây, tôi đã viết một hàm đơn giản trả về một biến boolean toàn cầu mà sau đó bạn có thể sử dụng xuống dòng. Rất dễ kiểm tra IE.

var isIE;
(function() {
    var ua = window.navigator.userAgent,
        msie = ua.indexOf('MSIE '),
        trident = ua.indexOf('Trident/');

    isIE = (msie > -1 || trident > -1) ? true : false;
})();

if (isIE) {
    alert("I am an Internet Explorer!");
}

Bằng cách này, bạn chỉ phải thực hiện tra cứu một lần và bạn lưu kết quả vào một biến, thay vì phải tìm nạp kết quả trên mỗi lệnh gọi hàm. (Theo như tôi biết, bạn thậm chí không phải đợi tài liệu sẵn sàng thực thi mã này vì tác nhân người dùng không liên quan đến DOM.)


2

Hãy thử điều này nếu bạn đang sử dụng phiên bản jquery> = 1.9 ,

var browser;
jQuery.uaMatch = function (ua) {
    ua = ua.toLowerCase();

    var match = /(chrome)[ \/]([\w.]+)/.exec(ua) ||
        /(webkit)[ \/]([\w.]+)/.exec(ua) ||
        /(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) ||
        /(msie) ([\w.]+)/.exec(ua) || 
        ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) ||
       /(Trident)[\/]([\w.]+)/.exec(ua) || [];

    return {
        browser: match[1] || "",
        version: match[2] || "0"
    };
};
// Don't clobber any existing jQuery.browser in case it's different
if (!jQuery.browser) {
    matched = jQuery.uaMatch(navigator.userAgent);
    browser = {};

    if (matched.browser) {
        browser[matched.browser] = true;
        browser.version = matched.version;
    }

    // Chrome is Webkit, but Webkit is also Safari.
    if (browser.chrome) {
        browser.webkit = true;
    } else if (browser.webkit) {
        browser.safari = true;
    }

    jQuery.browser = browser;
}

Nếu sử dụng phiên bản jQuery <1.9 ($ .browser đã bị xóa trong jQuery 1.9), hãy sử dụng mã sau đây:

$('.myClass').on('click', function (event) {
    if ($.browser.msie) {
        alert($.browser.version);
    }
});

Cám ơn vì cái này. Thật không may, chúng tôi vẫn đang ở phiên bản 1.7.2 và chưa thể thay đổi điều này.
dùng2571510

Theo như tôi có thể thấy, điều này không tính đến các IE mới hơn, mà dựa trên công cụ Trident.
Bram Vanroy

Cập nhật cho các IE mới nhất dựa trên Trident
Rohan Kumar

1

Giải pháp của @ SpiderCode không hoạt động với IE 11. Đây là giải pháp tốt nhất mà tôi đã sử dụng từ đó trong mã của mình, nơi tôi cần phát hiện trình duyệt cho tính năng cụ thể.

IE11 không còn báo cáo là MSIE, theo danh sách các thay đổi này, đó là cố ý để tránh phát hiện sai.

Những gì bạn có thể làm nếu bạn thực sự muốn biết IE là phát hiện Trident / chuỗi trong tác nhân người dùng nếu navigator.appName trả về Netscape, đại loại như (chưa được kiểm tra);

Nhờ câu trả lời này

function isIE()
{
  var rv = -1;
  if (navigator.appName == 'Microsoft Internet Explorer')
  {
    var ua = navigator.userAgent;
    var re  = new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})");
    if (re.exec(ua) != null)
      rv = parseFloat( RegExp.$1 );
  }
  else if (navigator.appName == 'Netscape')
  {
    var ua = navigator.userAgent;
    var re  = new RegExp("Trident/.*rv:([0-9]{1,}[\.0-9]{0,})");
    if (re.exec(ua) != null)
      rv = parseFloat( RegExp.$1 );
  }
  return rv == -1 ? false: true;
}

1

Dưới đây tôi tìm thấy cách thanh lịch để làm điều này trong khi googling ---

/ detect IE
var IEversion = detectIE();

if (IEversion !== false) {
  document.getElementById('result').innerHTML = 'IE ' + IEversion;
} else {
  document.getElementById('result').innerHTML = 'NOT IE';
}

// 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';

  // IE 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 (IE 12+)
  // 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;
}

1
Đây chính xác là mã từ cây bút của tôi tại CodePen , đó là một phần câu trả lời của tôi cho câu hỏi này . ;-)
Mario

1
Có, tôi đã sử dụng tương tự nhưng mọi người không muốn chia sẻ liên kết. sẽ cập nhật liên kết trong tài liệu tham khảo ở đây trở đi. Cảm ơn vì công việc tuyệt vời Mario.
Rameshwar Vyevhare

1

Cập nhật câu trả lời của SpiderCode để khắc phục các sự cố trong đó chuỗi 'MSIE' trả về -1 nhưng nó khớp với 'Trident'. Nó được sử dụng để trả về NAN, nhưng bây giờ trả về 11 cho phiên bản IE đó.

   function msieversion() {
       var ua = window.navigator.userAgent;
       var msie = ua.indexOf("MSIE ");
       if (msie > -1) {
           return ua.substring(msie + 5, ua.indexOf(".", msie));
       } else if (navigator.userAgent.match(/Trident.*rv\:11\./)) {
           return 11;
       } else {
           return false;
       }
    }

0

Bạn có thể phát hiện ra tất cả Internet Explorer (Phiên bản thử nghiệm 12).

<script>
    var $userAgent = '';
    if(/MSIE/i['test'](navigator['userAgent'])==true||/rv/i['test'](navigator['userAgent'])==true||/Edge/i['test'](navigator['userAgent'])==true){
       $userAgent='ie';
    } else {
       $userAgent='other';
    }

    alert($userAgent);
</script>

Xem tại đây https://jsfiddle.net/v7npeLwe/


0
function msieversion() {
var ua = window.navigator.userAgent;
console.log(ua);
var msie = ua.indexOf("MSIE ");

if (msie > -1 || navigator.userAgent.match(/Trident.*rv:11\./)) { 
    // If Internet Explorer, return version numbe
    // You can do what you want only in IE in here.
    var version_number=parseInt(ua.substring(msie + 5, ua.indexOf(".", msie)));
    if (isNaN(version_number)) {
        var rv_index=ua.indexOf("rv:");
        version_number=parseInt(ua.substring(rv_index+3,ua.indexOf(".",rv_index)));
    }
    console.log(version_number);
} else {       
    //other browser   
    console.log('otherbrowser');
}
}

Bạn sẽ thấy kết quả trong bảng điều khiển, vui lòng sử dụng chrome Inspect.


0

Tôi đã đặt mã này trong chức năng sẵn sàng của tài liệu và nó chỉ kích hoạt trong trình duyệt internet explorer. Đã thử nghiệm trong Internet Explorer 11.

var ua = window.navigator.userAgent;
ms_ie = /MSIE|Trident/.test(ua);
if ( ms_ie ) {
    //Do internet explorer exclusive behaviour here
}

0

Điều này chỉ hoạt động dưới phiên bản IE 11.

var ie_version = parseInt(window.navigator.userAgent.substring(window.navigator.userAgent.indexOf("MSIE ") + 5, window.navigator.userAgent.indexOf(".", window.navigator.userAgent.indexOf("MSIE "))));

console.log("version number",ie_version);


0

Chức năng JavaScript để phát hiện phiên bản Internet Explorer hoặc Edge

function ieVersion(uaString) {
  uaString = uaString || navigator.userAgent;
  var match = /\b(MSIE |Trident.*?rv:|Edge\/)(\d+)/.exec(uaString);
  if (match) return parseInt(match[2])
}

0

Necromance.

Để không phụ thuộc vào chuỗi tác nhân người dùng, chỉ cần kiểm tra một vài thuộc tính:

if (document.documentMode) 
{
    console.log('Hello Microsoft IE User!');
}

if (!document.documentMode && window.msWriteProfilerMark) {
    console.log('Hello Microsoft Edge User!');
}

if (document.documentMode || window.msWriteProfilerMark) 
{
    console.log('Hello Microsoft User!');
}

if (window.msWriteProfilerMark) 
{
    console.log('Hello Microsoft User in fewer characters!');
}

Ngoài ra, điều này phát hiện Chredge mới (Anaheim):

function isEdg()
{ 

    for (var i = 0, u="Microsoft", l =u.length; i < navigator.plugins.length; i++)
    {
        if (navigator.plugins[i].name != null && navigator.plugins[i].name.substr(0, l) === u)
            return true;
    }

    return false;
}

Và điều này phát hiện ra crom:

function isChromium()
{ 

    for (var i = 0, u="Chromium", l =u.length; i < navigator.plugins.length; i++)
    {
        if (navigator.plugins[i].name != null && navigator.plugins[i].name.substr(0, l) === u)
            return true;
    }

    return false;
}

Và Safari này:

if(window.safari)
{
    console.log("Safari, yeah!");
}

-1

Hãy thử làm như thế này

if ($.browser.msie && $.browser.version == 8) {
    //my stuff

}

jQuery không chấp nhận điều này trong 1.3 và loại bỏ hoàn toàn trong 1.9.
geca

-1

Tôi nghĩ nó sẽ giúp bạn ở đây

function checkIsIE() {
    var isIE = false;
    if (navigator.userAgent.indexOf('MSIE') !== -1 || navigator.appVersion.indexOf('Trident/') > 0) {
        isIE = true;
    }
    if (isIE)  // If Internet Explorer, return version number
    {
        kendo.ui.Window.fn._keydown = function (originalFn) {
            var KEY_ESC = 27;
            return function (e) {
                if (e.which !== KEY_ESC) {
                    originalFn.call(this, e);
                }
            };
        }(kendo.ui.Window.fn._keydown);

        var windowBrowser = $("#windowBrowser").kendoWindow({
            modal: true,
            id: 'dialogBrowser',
            visible: false,
            width: "40%",
            title: "Thông báo",
            scrollable: false,
            resizable: false,
            deactivate: false,
            position: {
                top: 100,
                left: '30%'
            }
        }).data('kendoWindow');
        var html = '<br /><div style="width:100%;text-align:center"><p style="color:red;font-weight:bold">Please use the browser below to use the tool</p>';
        html += '<img src="/Scripts/IPTVClearFeePackage_Box/Images/firefox.png"/>';
        html += ' <img src="/Scripts/IPTVClearFeePackage_Box/Images/chrome.png" />';
        html += ' <img src="/Scripts/IPTVClearFeePackage_Box/Images/opera.png" />';
        html += '<hr /><form><input type="button" class="btn btn-danger" value="Đóng trình duyệt" onclick="window.close()"></form><div>';
        windowBrowser.content(html);
        windowBrowser.open();

        $("#windowBrowser").parent().find(".k-window-titlebar").remove();
    }
    else  // If another browser, return 0
    {
        return false;
    }
}

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.