การตรวจหา Internet Explorer 11


126

ฉันรู้ว่า IE 11 มีสตริงตัวแทนผู้ใช้ที่แตกต่างจาก IE อื่น ๆ ทั้งหมด

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

ฉันได้พยายามตรวจหา IE 11 พร้อมคำตอบที่ระบุสำหรับคำถามนี้ '

Jquery ไม่สามารถตรวจพบ IE 11

thats !!navigator.userAgent.match(/Trident\/7\./)

แต่ฉันได้รับข้อผิดพลาด Object not found and needs to be re-evaluated.

จากนั้นฉันก็เปิดคอนโซลนักพัฒนาใน IE11 และพยายามเข้าถึงวัตถุจาวาสคริปต์ที่กำหนดไว้ล่วงหน้าฉันยังคงได้รับข้อผิดพลาดเดียวกัน

ฉันเหนื่อย

navigator.userAgent

window.navigator

console.log('test');

ใครมีความคิดเกี่ยวกับเรื่องนี้?


@Bobkhin ฉันได้กล่าวไว้ข้างต้นปัญหาของฉัน ได้รับข้อผิดพลาดObject not found and needs to be re-evaluated.
Miqdad Ali

เป็นไปได้ที่จะทำซ้ำวิธีตรวจหา IE 11 ด้วย javascript ใน Asp.net
RandomSeed

อาจซ้ำกันได้ของวิธีตรวจหา IE11?
Paul Sweatte

คำตอบ:


188

แก้ไข 18 พ.ย. 2559

รหัสนี้ยังใช้งานได้ ( สำหรับผู้ที่ชอบโซลูชันอื่นโดยไม่ใช้ ActiveX )

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

คำตอบเดิม

ในการตรวจสอบ Ie11 คุณสามารถใช้สิ่งนี้: (ทดสอบแล้ว)

(หรือเรียกใช้สิ่งนี้ )

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

ฉันมี VMS ทั้งหมดของ IE:

ใส่คำอธิบายภาพที่นี่

ใส่คำอธิบายภาพที่นี่

ใส่คำอธิบายภาพที่นี่

ใส่คำอธิบายภาพที่นี่

ข้อสังเกต: สิ่งนี้ไม่สามารถใช้ได้กับ IE11:

อย่างที่คุณเห็นที่นี่มันส่งกลับจริง:

ใส่คำอธิบายภาพที่นี่

เราจะทำอะไรได้บ้าง:

เห็นได้ชัดว่าพวกเขาเพิ่มพื้นที่บิตของเครื่อง:

ie11:

"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"

ie12:

"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"

ดังนั้นเราสามารถทำได้:

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

สิ่งนี้จะส่งคืนจริงสำหรับ ie11 เท่านั้น


1
@Jan ใช่. IE11 เท่านั้นที่จะคืนค่าจริงสำหรับเงื่อนไขทั้งหมดนี้ ฉันเพิ่งแสดงให้เห็นว่า <11 ส่งคืนเท็จ
Royi Namir

1
@IanSteffy นี่เป็นเพียงการแสดงผลลัพธ์ (!) ของการดำเนินการ คุณสามารถเปิดไฟล์ HTML และเพิ่มแท็กสคริปต์และรันคำสั่งภายในสคริปต์นั้น นี่ทำงานนี้
Royi Namir

2
x64ส่งคืนทั้ง Chrome และ Edge
Gene R

3
เดี๋ยวก่อนมี IE12? ฉันคิดว่า IE11 เป็นตัวสุดท้ายและในไม่ช้าเราจะไม่ต้องกังวลกับเบราว์เซอร์โง่ ๆ อีกต่อไป! ☹
Michael Scheper

1
ไม่ได้ทำงานสำหรับ IE 11.0.9600.19431 ของฉันบน Windows 7 องค์กร ไม่มีwindow.MSInputMethodContext.
Heinrich Ulbricht

105

ในการตรวจหา MSIE (จากเวอร์ชัน 6 ถึง 11) อย่างรวดเร็ว:

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

2
ไม่ควรที่สองindexOf()จะเป็น> -1?
ปฏิรูป

ใช่ฉันไม่รู้ว่าทำไมมันถึง> 0 และไม่ใช่> -1 แต่ "Trident /" ปรากฏขึ้นไกลกว่ามากใน appVersion string อย่างไรก็ตาม
chrismarx

22

ฉันใช้ฟังก์ชันต่อไปนี้เพื่อตรวจจับเวอร์ชัน 9, 10 และ 11 ของ 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

คำตอบทั้งหมดข้างต้นไม่สนใจข้อเท็จจริงที่คุณพูดถึงว่าคุณไม่มีหน้าต่างหรือตัวนำทาง :-)

จากนั้นฉันก็เปิดคอนโซลนักพัฒนาใน IE11

และนั่นคือสิ่งที่กล่าว

ไม่พบวัตถุและต้องได้รับการประเมินอีกครั้ง

และเนวิเกเตอร์หน้าต่างคอนโซลไม่มีอยู่และจำเป็นต้องได้รับการประเมินใหม่ ฉันมีสิ่งนั้นในการเลียนแบบ เพียงแค่ปิดและเปิดคอนโซลสองสามครั้ง


5
ขอขอบคุณที่อ่านคำถามและตอบปัญหาด้วยการประเมินซ้ำ
marknadal

8
ทำงานให้ฉันด้วย นี่คือเหตุผลที่จะมีปาร์ตี้ทั่วโลกเมื่อ IE เสียชีวิต
voltrevo

การปิดและเปิดคอนโซลใช้ได้ผลสำหรับฉัน พฤติกรรมแปลก ๆ เมื่อเทียบกับ Firefox หรือ Chrome (แต่เป็น IE ดังนั้นตัวเลข)
Ectropy

8

วิธีที่ค่อนข้างปลอดภัยและรัดกุมในการตรวจจับIE 11 เท่านั้นคือ

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

หรืออะไรทำนองนี้
var IE11= !!window.msCrypto;


msCryptoเป็นwindow.cryptoอ็อบเจ็กต์เวอร์ชันนำหน้าและใช้งานได้เฉพาะใน IE 11 เท่านั้น
https://developer.mozilla.org/en-US/docs/Web/API/Window/crypto


ทางออกเดียวที่ใช้งานได้ (นั่นคือวิธีที่สั้นที่สุดสะอาดที่สุดและสง่างามที่สุด)! Royi Namir /x64|x32/ig.test(window.navigator.userAgent)ใช้กับ Firefox ด้วย!
Sándor Zuboly

4

และวิธีการใช้งานนี้

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

1
ฉันคิดว่าคุณพิมพ์ผิดในฟังก์ชันของคุณ ขั้นแรกให้คุณทำการตรวจสอบเงื่อนไขซึ่งไม่ได้ใช้ && "ActiveXObject" in windowประการที่สองบางทีคุณอาจหมายถึง สาม: เคล็ดลับกับการปฏิเสธสองครั้ง!!คืออะไร?
dma_k

1
!! ค่อนข้างหมายถึง 'Coerce to boolean'
Andrew Gray

4

โอเคลองสิ่งนี้ง่ายและสำหรับ IE11 และ IE ที่ต่ำกว่า 11 เวอร์ชัน

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

navigator.userAgent.toUpperCase().indexOf("TRIDENT/") != -1สำหรับ IE 11 เวอร์ชัน navigator.userAgent.toUpperCase().indexOf("MSIE") != -1สำหรับ IE ต่ำกว่า 11 เวอร์ชัน

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

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


2

ลิงค์นี้มีประโยชน์ลิงค์นี้เป็นประโยชน์มันมีโค้ดจาวาสคริปต์เพื่อตรวจหา IE ทุกเวอร์ชันจนถึง IE11 ฉันทดสอบสคริปต์ด้วยโปรแกรมจำลอง IE11 หากต้องการค้นหาโปรแกรมจำลอง IE11 ให้คลิกขวาที่เว็บเบราว์เซอร์คลิก "ตรวจสอบองค์ประกอบ" ที่ด้านล่างซ้ายของหน้าให้เลื่อนแถบนำทางลงแล้วคลิกไอคอนเดสก์ท็อป ช่องรายการแบบเลื่อนลง "User Agent String" มีตัวเลือกในการจำลอง IE6-11

มันได้ผล. ฉันเพิ่งใช้มันไม่กี่นาทีก่อนที่จะเขียนคำตอบนี้ ไม่สามารถโพสต์ภาพรวม - ชื่อเสียงไม่เพียงพอ


นี่คือรหัส - ไปที่ลิงค์เพื่อดูอีกครั้ง:

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

การใช้ RegExp นี้ดูเหมือนจะใช้ได้กับ IE 10 และ IE 11:

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

ฉันไม่มี IE ที่เก่ากว่า IE 10 เพื่อทดสอบสิ่งนี้


0

ใช้ Navigator: -

navigatorเป็นวัตถุที่มีข้อมูลทั้งหมดที่เกี่ยวกับเบราว์เซอร์เครื่องไคลเอนต์ที่

navigator.appName ส่งคืนชื่อเบราว์เซอร์ของเครื่องไคลเอนต์

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 คือ Netscape บน IE 11 พวกเขาทำทุกอย่างที่ทำได้เพื่อหลอกลวงนักพัฒนา
kagronick

0

ฉันพบว่า IE11 กำลังให้สตริงตัวแทนผู้ใช้มากกว่าหนึ่งสตริงในสภาพแวดล้อมที่แตกต่างกัน

แทนที่จะพึ่งพาMSIEและแนวทางอื่น ๆ ควรพึ่งพาTridentเวอร์ชันมากกว่า

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

หวังว่านี่จะช่วยได้ :)

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