ตรวจสอบว่าผู้ใช้ใช้ IE หรือไม่


390

ฉันกำลังเรียกฟังก์ชั่นเหมือนด้านล่างโดยคลิกที่ divs กับคลาสที่กำหนด

มีวิธีที่ฉันสามารถตรวจสอบเมื่อเริ่มต้นฟังก์ชั่นถ้าผู้ใช้ใช้ Internet Explorer และยกเลิก / ยกเลิกถ้าพวกเขาใช้เบราว์เซอร์อื่น ๆ เพื่อให้ทำงานเฉพาะสำหรับผู้ใช้ IE? ผู้ใช้ที่นี่จะเป็น IE8 หรือสูงกว่าดังนั้นฉันจึงไม่จำเป็นต้องครอบคลุม IE7 และรุ่นที่ต่ำกว่า

หากฉันสามารถบอกได้ว่าเบราว์เซอร์ใดที่ใช้งานอยู่จะดี แต่ก็ไม่จำเป็น

ฟังก์ชั่นตัวอย่าง:

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

1
ใช้ modernizer เพื่อตรวจหา IE หรือเบราว์เซอร์อื่น ๆ stackoverflow.com/questions/13478303/…
chris

7
ตามมาตรฐานการพัฒนาเว็บสมัยใหม่การพัฒนา IE สำหรับเวอร์ชันเก่าเป็นสิ่งที่ไม่ดี
Rosseyn

7
ที่จริงแล้ว "การปฏิบัติที่ไม่ดี" นี้ถูกบังคับโดยมาตรฐานของตัวเองดังนั้นจึงไม่ใช่ความผิดของนักพัฒนา ... เบราว์เซอร์ทำงานแตกต่างกันไป เพื่อที่จะทำให้บางสิ่งบางอย่างที่ไม่ได้เป็นรถและไม่น่าเบื่อเป็นนรกหนึ่งมีที่จะทำการตรวจสอบเบราว์เซอร์ ผมจะแนะนำการปฏิบัติที่ดีที่สุดอื่น ๆWith modern web development, it's bad practice to support non-Chromium-based browsers (with Safari not considered to be Chromium-based at all): ขออภัยความวิกลจริตนี้ต้องสิ้นสุดลง ณ จุดหนึ่งและอย่างใด ...
user2173353

2
เป็นวิธีปฏิบัติที่ดีกว่าในปัจจุบันที่ต้องทำ "การตรวจจับคุณสมบัติ" เหนือ "การตรวจจับเบราว์เซอร์" ถามว่าเบราว์เซอร์ทำในสิ่งที่คุณต้องการหรือไม่
Chris Rogers

2
@Chris - ขอโทษ ... หมายถึงการที่จะมีน้ำเสียง jokey มากกว่า ฉันกำลังจะตำหนิ IE ที่ขโมยความสุขและทิ้งฉันไปด้วยความขมขื่นและความหงุดหงิด :)
JDB ยังคงจดจำโมนิก้า

คำตอบ:


477

ใช้วิธี JavaScript ด้านล่าง:

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;
}

คุณสามารถดูรายละเอียดได้จากเว็บไซต์สนับสนุนของ Microsoft ด้านล่าง:

วิธีการตรวจสอบเวอร์ชั่นของเบราว์เซอร์จากสคริปต์

อัปเดต: (รองรับ 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
แม้ว่าสิ่งนี้จะทำงานได้ดีเนื่องจากตัวแปร ua จะไม่เริ่มต้นด้วย MSIE แต่การเขียนif (msie > 0)นั้นทำให้เข้าใจผิด หากไม่พบค่าฟังก์ชัน indexOf () จะส่งกลับค่า -1 ไม่ใช่ 0 ดังนั้นif (msie > -1)จะเป็นการอธิบายเพิ่มเติม
เนวิลล์ Nazerane

61
ส่งคืน NaN ใน IE11 สำหรับฉัน
จริง

7
@verism และคนอื่น ๆ : ตรวจสอบคำตอบที่ใช้ได้กับIE 11: stackoverflow.com/a/21712356/114029
Leniel Maccaferri

8
navigator.userAgent.indexOf ("MSIE")> 0 || navigator.userAgent.indexOf ("ตรีศูล")> 0 || navigator.userAgent.indexOf ("Edge")> 0
tylermauthe

12
/Edge\/|Trident\/|MSIE /.test(window.navigator.userAgent)ฉันรู้ว่ามันใช้งานได้ในวันที่ 10 และ 11 หากคุณสามารถยืนยัน <IE9 และ Edge ได้ให้แก้ไขคำตอบ
Indolering

595

หลายปีต่อมาและตอนนี้เบราว์เซอร์ Edge ใช้ Chromium เป็นเอ็นจิ้นการเรนเดอร์
การตรวจสอบ IE 11 ยังคงเป็นเรื่องน่าเศร้า

นี่คือแนวทางที่ตรงไปตรงมามากขึ้นเนื่องจาก IE รุ่นเก่าควรจะหายไป

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

นี่คือคำตอบเก่าของฉัน (2014):

ใน Edge สตริงตัวแทนผู้ใช้มีการเปลี่ยนแปลง

/**
 * 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;
}

ตัวอย่างการใช้งาน:

alert('IEEdge ' + detectIEEdge());

สตริงเริ่มต้นของ IE 10:

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

สตริงเริ่มต้นของ IE 11:

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

สตริงเริ่มต้นของ 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 

สตริงเริ่มต้นของ Edge 13 (ขอบคุณ @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 

สตริงเริ่มต้นของ 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 

สตริงเริ่มต้นของ 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 

สตริงเริ่มต้นของ 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 

สตริงเริ่มต้นของ 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 

สตริงเริ่มต้นของ Edge 18 (ดูตัวอย่างภายใน):

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 

ทดสอบที่ CodePen:

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


4
ขอบคุณสำหรับการแสดงความคิดเห็น ฉันยังไม่ได้ตรวจสอบคำตอบของคุณ แต่ฉันต้องการที่จะแสดงความคิดเห็นสิ่งหนึ่ง: เป็นคนแรก 'ถ้า' มี 'ผลตอบแทน' คุณไม่จำเป็นต้องมี 'อื่น' ในภายหลัง
Mario

30
เพียงแค่สงสัยว่าทำไม heck จึงเปลี่ยนสายผู้ใช้ตัวแทนใน IE เวอร์ชั่นใหม่ MS ไม่ต้องการให้เราตรวจสอบเว็บเบราว์เซอร์ที่น่ากลัวอย่างจริงจัง
c00000fd

3
@SameerAlibhai ซึ่งฟังดูดีในทางทฤษฎี แต่ในทางปฏิบัติโดยเฉพาะอย่างยิ่งในปัจจุบันมันไม่ได้ใช้งานได้จริง บางครั้งปัญหาเกิดขึ้นว่าการตรวจจับ "คุณสมบัติ" เดียวไม่รวมและคุณสมบัติบางอย่างมีพฤติกรรมการใช้งานที่สามารถแก้ไขได้ด้วยความรู้ของเบราว์เซอร์เท่านั้น ถ้าฉันต้องการทำอะไรง่ายๆอย่างเช่นรวบรวมสถิติเบราว์เซอร์
Slight

34
ควรสังเกตว่า Edge ไม่ใช่ "IE12" จริงๆ แต่จริงๆแล้วเป็นเบราว์เซอร์ที่แยกจากกันโดยสิ้นเชิง Windows 10 มาพร้อมกับทั้ง IE11 และ Edge ที่ติดตั้ง
Moloko

16
ความเกลียดชังของฉันสำหรับ IE เพิ่มขึ้น
Kolob Canyon

135

หากสิ่งที่คุณต้องการทราบคือหากเบราว์เซอร์เป็น IE หรือไม่คุณสามารถทำได้:

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
}

อัปเดต 1: วิธีที่ดีกว่า

ฉันแนะนำสิ่งนี้ในขณะนี้ มันยังคงอ่านได้ง่ายและมีรหัสน้อยกว่า :)

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

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

ขอบคุณ JohnnyFun ในความคิดเห็นสำหรับคำตอบที่สั้นลง :)

อัปเดต 2: ทดสอบ IE ใน CSS

ประการแรกหากทำได้คุณควรใช้@supportsข้อความสั่งแทน JS เพื่อตรวจสอบว่าเบราว์เซอร์รองรับคุณสมบัติ CSS บางอย่างหรือไม่

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

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

(โปรดทราบว่า IE ไม่รองรับ @supportsเลยและจะละเว้นลักษณะใด ๆ ที่อยู่ใน@supportsคำสั่ง)

หากไม่สามารถแก้ไขปัญหาได้@supportsคุณสามารถทำสิ่งนี้ได้:

// 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 */
}

(บันทึก: classListค่อนข้างใหม่สำหรับ JS และฉันคิดว่าจากเบราว์เซอร์ IE จะใช้งานได้ใน IE11 เท่านั้นอาจเป็นไปได้ที่ IE10)

หากคุณใช้ SCSS (Sass) ในโครงการของคุณสิ่งนี้สามารถทำให้ง่ายขึ้นเพื่อ:

/* SCSS (Sass) */

.element {
  /* styles that apply everywhere */

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

อัปเดต 3: การเพิ่ม Microsoft Edge (ไม่แนะนำ)

หากคุณต้องการเพิ่ม Microsoft Edge ลงในรายการคุณสามารถทำสิ่งต่อไปนี้ อย่างไรก็ตามฉันไม่แนะนำเพราะ Edge เป็นเบราว์เซอร์ที่เชี่ยวชาญมากกว่า IE

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

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

5
หรือเหมือนกันในไม่กี่ไบต์: ms_ie = ~ ua.indexOf ('MSIE') || ~ ua.indexOf ( 'ตรีศูล /'); ;-)
Simon Steinberger

12
รุ่นของฉันทำให้รู้สึกมากขึ้นทันทีแม้ว่ามนุษย์ แต่น้อยไบต์เป็นเสมอดี :)
แดเนียลเกโร

7
หรือms_ie = !!ua.match(/MSIE|Trident/)
xori

5
หรือ ms_ie = /MSIE|Trident/.test(ua)
JohnnyFun

1
@SimonSteinberger ~มีความสำคัญอะไรบ้าง?
1.21 gigawatts

45

สิ่งนี้จะส่งคืนtrueสำหรับ Internet Explorer ทุกรุ่น:

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

userAgentพารามิเตอร์เป็นตัวเลือกและค่าเริ่มต้นไปยังตัวแทนของผู้ใช้เบราว์เซอร์


สิ่งนี้ควรจะดี แต่คุณลืมตั้งค่าเริ่มต้น "return true" หรือ "return 1" สำหรับเบราว์เซอร์ IE ปัจจุบันนี้ไม่ได้ส่งคืนค่าใด ๆ เมื่อตรวจพบเบราว์เซอร์ IE
Vincent Edward Gedaria Binua

10
เหตุใดคุณจึงต้องการใช้ Edge เป็น IE ในแง่ของความเข้ากันได้พวกเขามีน้อยเหมือนกันในปัจจุบัน
Minexew

@docta_faustus userAgent เป็นพารามิเตอร์ไม่ใช่แบบโกลบอล
bendytree

29

นี่คือวิธีที่ทีม Angularjs ทำ ( 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;

จากนั้นมีหลายบรรทัดของรหัสที่กระจัดกระจายไปทั่วใช้เป็นตัวเลขเช่น

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

และ

if (enabled && msie < 8) {

window.document.documentMode ไม่ได้กำหนดใน MS Edge
Veselin Vasilev

25
มันไม่ได้กำหนดใน MS Edge เพราะ MS Edge ไม่ใช่ IE!
JCKödel

1
document.documentModeได้รับการสนับสนุนโดย IE8 + มันจะใช้'undefined'สำหรับ Edge หรือ Chrome / FireFox ... ฉันเปลี่ยนรหัสนี้เป็นvar IEver = window.document.documentMode || (window.attachEvent? 1 : 99);เช่นนั้นจะส่งคืนเวอร์ชัน IE ที่แน่นอนสำหรับ IE8 +, 99 สำหรับเบราว์เซอร์ที่ไม่ใช่ IE (โดยปกติจะเป็นเบราว์เซอร์ที่ทันสมัย) และ 1 สำหรับ IE5-7 เก่า สิ่งนี้เขียนขึ้นเพราะเรามักจะต้องการงานพิเศษสำหรับ IE รุ่นเก่าเท่านั้น ดังนั้นif (IEver < 9) { ... }หมายความว่าถ้าเป็น IE เก่า
S.Serpooshan

29

คุณสามารถใช้วัตถุนำทางในการตรวจสอบผู้ใช้นำทางคุณไม่จำเป็นต้อง jQuery

<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
นี้ทำให้ผมเท็จ IE11 ของฉัน
เคอร์ติ

2
ตัวแทนผู้ใช้ของ IE11 นั้นแตกต่างจาก MSIE (XX); จะพบ IE11 โดยตรวจสอบตรีศูล
Orpheus

สิ่งนี้ให้ผลบวกที่ผิดพลาดใน Firefox 45.0.2
Tim S. Van Haren

การทดสอบที่ผิด indexOf ไม่คืนค่าจริงหรือเท็จเช่นฟังก์ชันทดสอบ regex ที่คุณได้ทำ navigator.userAgent.indexOf ("ตรีศูล /")! = -1
Dahar Youssef

10

ใช้คำตอบข้างต้น บูลีนที่เรียบง่ายและกลับมาอย่างย่อ:

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


1
ส่งคืน false ใน FireFox 44.0.2 บน Widnows 10. FireFox เวอร์ชันใดที่ส่งคืนจริง @ SiKni8
Arthur Hebert

9

วิธีที่ 01:
$ .browser เลิกใช้แล้วใน jQuery เวอร์ชัน 1.3 และลบออกใน 1.9

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

วิธีที่ 02:
การใช้ข้อคิดเห็นแบบมีเงื่อนไข

<!--[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]>

วิธีที่ 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 );
}

วิธีที่ 04:
ใช้การตรวจสอบ JavaScript / ด้วยตนเอง

/*
     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);
     }

 }());

ลิงค์อ้างอิง


@radhe ฉันได้อัปเดตคำตอบหวังว่านี่จะเป็นประโยชน์สำหรับคุณ
Aamir Shahzad

ตามหมายเหตุ: วิธีที่ 2จะไม่ทำงานใน IE10 หรือดีกว่าในโหมดมาตรฐาน สำหรับข้อมูลเพิ่มเติม: ไม่สนับสนุนความคิดเห็นแบบมีเงื่อนไขอีกต่อไป
แทรกชื่อผู้ใช้ที่นี่

@insertusername ที่นี่คุณพูดถูกมากฉันคิดว่าการใช้.ie10class เป็นหนึ่งในตัวเลือกที่ดีที่สุดหากคุณกำลังแก้ไข css สำหรับ ie10 เท่านั้น ในฐานะที่เป็น Internet explorer 10 เพิ่ม".ie10"คลาสให้กับองค์ประกอบ HTML <html class="ie10">คุณสามารถใช้มันได้.ie10 .myclass {//some css here}
Aamir Shahzad

8

ฉันแค่ต้องการตรวจสอบว่าเบราว์เซอร์นั้นเป็น IE11 หรือเก่ากว่าหรือเปล่า

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
สิ่งนี้ทำให้ฉันได้รับการโหวตว่าเป็นเรื่องสำคัญสำหรับการกำหนดมาตรฐานการประชุม
redbandit

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

    return ie > -1;
}

ไม่ตอบคำถาม Edge ไม่ใช่ IE
hda

hda, คำถามวันที่จาก 2013, ฉันคิดว่าวันนี้, มันเป็นเรื่องที่น่าสนใจที่จะไม่สนใจ "Edge"
Boss COTIGA

5

ใช้ 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;
});

ไม่ตอบคำถามเนื่องจาก Edge ไม่ใช่ IE นอกจากนี้ Edge ไม่ใช่ IE12 เมื่อเปิดใช้งาน Edge-based Edge คุณควรเพิ่ม Chrome หรือ Opera ลงในรายการนี้ (ไม่ว่าคุณต้องการบรรลุถึงสิ่งใดมันจะง่ายต่อการตรวจจับ Firefox)
hda

5

หรือรุ่นสั้น ๆ นี้ให้ผลตอบแทนจริงหากเบราว์เซอร์คือ Internet Explorer

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

4

อีกฟังก์ชั่นที่เรียบง่าย (แต่มนุษย์อ่านได้) ฟังก์ชั่นตรวจสอบว่าเบราว์เซอร์เป็น IE หรือไม่ (ไม่สนใจ Edge ซึ่งไม่ได้เลวร้ายอะไรเลย):

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

หากคุณไม่ต้องการใช้ useragent คุณสามารถทำได้เพื่อตรวจสอบว่าเบราว์เซอร์นั้นเป็น IE หรือไม่ รหัสที่คอมเม้นท์จะทำงานในเบราว์เซอร์ IE และเปลี่ยน "false" เป็น "true"

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

1
IE11 ไม่รองรับการคอมไพล์แบบมีเงื่อนไข
Gabriel Llamas

ฉันเพิ่งลองและยังใช้งานได้ คุณแน่ใจหรือว่าไม่รองรับ
dev4life

3

ฉันรู้ว่านี่เป็นคำถามเก่า แต่ในกรณีที่ทุกคนเจอมันอีกครั้งและมีปัญหาในการตรวจหา IE11 นี่เป็นวิธีแก้ปัญหาสำหรับ IE เวอร์ชันปัจจุบันทั้งหมด

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

3

ฉันเคยใช้สิ่งนี้

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

มีคำตอบมากมายที่นี่และฉันต้องการเพิ่มข้อมูลของฉัน IE 11 เป็นคนที่เกี่ยวข้องกับ flexbox (ดูปัญหาและความไม่สอดคล้องทั้งหมดที่นี่ ) ซึ่งฉันต้องการวิธีที่ง่ายในการตรวจสอบว่าผู้ใช้ใช้เบราว์เซอร์ IE ใด ๆ (มากถึงและรวมถึง 11) แต่ยกเว้น Edge เพราะ Edge เป็นจริง ค่อนข้างดี

จากคำตอบที่ได้รับที่นี่ฉันเขียนฟังก์ชันง่าย ๆ ที่ส่งคืนตัวแปรบูลีนส่วนกลางซึ่งคุณสามารถใช้ลงในบรรทัดได้ ง่ายมากที่จะตรวจสอบ 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!");
}

วิธีนี้คุณต้องค้นหาเพียงครั้งเดียวและเก็บผลลัพธ์ไว้ในตัวแปรแทนที่จะต้องดึงผลลัพธ์ในแต่ละการเรียกฟังก์ชัน (เท่าที่ฉันรู้ว่าคุณไม่ต้องรอเอกสารพร้อมที่จะใช้รหัสนี้เนื่องจาก user-agent ไม่เกี่ยวข้องกับ DOM)


2

ลองนี้ถ้าคุณกำลังใช้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;
}

หากใช้jQuery เวอร์ชัน <1.9 ($ .browser ถูกลบใน jQuery 1.9) ให้ใช้รหัสต่อไปนี้แทน:

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

ขอบคุณสำหรับสิ่งนี้. น่าเสียดายที่เรายังคงเป็นรุ่น 1.7.2 และยังไม่สามารถเปลี่ยนแปลงได้
user2571510

เท่าที่ฉันเห็นนี่ไม่ได้คำนึงถึง IEs ที่ใหม่กว่าซึ่งขึ้นอยู่กับเครื่องยนต์ของ Trident
Bram Vanroy

อัปเดตสำหรับ IE ล่าสุดตาม Trident
Rohan Kumar

1

วิธีการแก้ปัญหาของ @ SpiderCode ไม่ทำงานกับ IE 11 นี่คือทางออกที่ดีที่สุดที่ฉันใช้จากนี้ไปในรหัสของฉันที่ฉันต้องการตรวจสอบเบราว์เซอร์สำหรับคุณสมบัติเฉพาะ

IE11 ไม่รายงานว่าเป็น MSIE อีกต่อไปตามรายการการเปลี่ยนแปลงนี้มีเจตนาเพื่อหลีกเลี่ยงการตรวจจับที่ผิดพลาด

คุณจะทำอย่างไรถ้าคุณอยากรู้ว่า IE คือการตรวจหาตรีศูล / สตริงในตัวแทนผู้ใช้ถ้า navigator.appName ส่งคืน Netscape สิ่งที่ชอบ (ไม่ได้ทดสอบ);

ขอบคุณคำตอบนี้

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

ด้านล่างฉันพบวิธีที่สง่างามในการทำเช่นนี้ในขณะที่ 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
ตรงนี้เป็นรหัสจากปากกาของฉันที่ CodePenที่เป็นส่วนหนึ่งของคำตอบของฉันกับคำถามนี้ ;-)
มาริโอ

1
ใช่ฉันใช้เหมือนกัน แต่ผู้คนไม่ต้องการแชร์ลิงก์ จะอัปเดตลิงก์โดยอ้างอิงที่นี่เป็นต้นไป ขอบคุณสำหรับการทำงานที่ยอดเยี่ยมมาริโอ
Rameshwar Vyevhare

1

อัปเดตเป็นคำตอบของ SpiderCode เพื่อแก้ไขปัญหาที่สตริง 'MSIE' ส่งกลับค่า -1 แต่ตรงกับ 'ตรีศูล' มันใช้เพื่อส่งคืน NAN แต่ตอนนี้ส่งคืน 11 สำหรับ 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

คุณสามารถตรวจสอบ Internet Explorer ทั้งหมด (ทดสอบรุ่นล่าสุด 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>

ดูที่นี่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');
}
}

คุณควรเห็นผลลัพธ์ในคอนโซลโปรดใช้ chrome Inspect


0

ฉันวางโค้ดนี้ไว้ในฟังก์ชั่นพร้อมใช้งานของเอกสารและมันเป็นเพียงทริกเกอร์ใน internet explorer ทดสอบใน Internet Explorer 11

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

0

ใช้งานได้ต่ำกว่ารุ่น 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

ฟังก์ชัน JavaScript เพื่อตรวจหาเวอร์ชันของ Internet Explorer หรือ 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

Necromancing

เพื่อไม่ให้ขึ้นอยู่กับสตริงตัวแทนผู้ใช้เพียงตรวจสอบคุณสมบัติบางอย่าง:

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!');
}

นอกจากนี้ยังตรวจพบ Chredge ใหม่ (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;
}

และนี่ตรวจพบโครเมียม:

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;
}

และ Safari นี้:

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

-1

ลองทำแบบนี้

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

}

jQuery เลิกใช้สิ่งนี้ใน 1.3 และนำออกอย่างสมบูรณ์ใน 1.9
geca

-1

ฉันคิดว่ามันจะช่วยคุณที่นี่

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;
    }
}

-3

คุณสามารถใช้ได้ $.browserเพื่อรับข้อมูลชื่อผู้จำหน่ายและเวอร์ชั่น

ดูhttp://api.jquery.com/jQuery.browser/


7
"คุณสมบัตินี้ถูกลบใน jQuery 1.9 และมีให้ผ่านทางปลั๊กอิน jQuery.migrate เท่านั้น"
Reeno
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.