Deteksi Internet Explorer 11


125

Saya tahu IE 11 memiliki string agen pengguna yang berbeda dari semua IE lainnya

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

Saya telah mencoba mendeteksi IE 11 dengan jawaban yang ditentukan untuk pertanyaan ini '

Jquery gagal mendeteksi IE 11

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

Tapi saya mendapatkan kesalahan Object not found and needs to be re-evaluated.

Kemudian saya membuka konsol pengembang di IE11 dan mencoba mengakses beberapa objek javascript yang telah ditentukan, saya masih mendapatkan kesalahan yang sama.

saya telah mencoba

navigator.userAgent

window.navigator

console.log('test');

Ada yang punya ide tentang itu?


@Bobkhin yang saya sebutkan di atas masalah saya. mendapatkan kesalahanObject not found and needs to be re-evaluated.
Miqdad Ali


Jawaban:


188

Edit 18 Nov 2016

Kode ini juga berfungsi ( bagi mereka yang lebih memilih solusi lain, tanpa menggunakan ActiveX )

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

Jawaban Asli

Untuk memeriksa Ie11, Anda dapat menggunakan ini: (diuji)

(atau jalankan ini )

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

Saya memiliki semua VMS IE:

masukkan deskripsi gambar di sini

masukkan deskripsi gambar di sini

masukkan deskripsi gambar di sini

masukkan deskripsi gambar di sini

Perhatikan: ini tidak akan berfungsi untuk IE11:

seperti yang Anda lihat di sini, ini mengembalikan nilai true:

masukkan deskripsi gambar di sini

Jadi apa yang bisa kita lakukan :

Rupanya, mereka menambahkan ruang bit mesin:

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"

jadi kita bisa melakukan:

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

ini akan mengembalikan true hanya untuk ie11.


1
@Annisa Iya. hanya IE11 yang akan mengembalikan true untuk seluruh kondisi ini. Saya baru saja menunjukkan bahwa <11 return false.
Royi Namir

1
@IanSteffy Ini hanya untuk menunjukkan hasil (!) Dari operasi tersebut. Anda dapat membuka file HTML dan menambahkan tag skrip dan menjalankan perintah di dalam skrip itu. Ini jalankan .
Royi Namir

2
x64mengembalikan Chrome dan Edge
Gene R

3
Tunggu, ada IE12? Saya pikir IE11 adalah yang terakhir dan kami tidak perlu khawatir lagi tentang browser bodoh itu! ☹
Michael Scheper

1
Apakah tidak bekerja untuk saya IE 11.0.9600.19431 pada Windows 7 Enterprise. Tidak ada window.MSInputMethodContext.
Heinrich Ulbricht

105

Untuk mendeteksi MSIE (dari versi 6 hingga 11) dengan cepat:

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

2
Tidak harus yang kedua indexOf()menjadi > -1?
direformasi

Ya, saya tidak tahu mengapa> 0 dan bukan> -1, tetapi "Trident /" muncul lebih jauh ke dalam string appVersion-
chrismarx

22

Saya menggunakan fungsi berikut untuk mendeteksi IE versi 9, 10 dan 11:

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

Semua jawaban di atas mengabaikan fakta bahwa Anda menyebutkan bahwa Anda tidak memiliki jendela atau navigator :-)

Kemudian saya membuka konsol pengembang di IE11

dan di situlah dikatakan

Objek tidak ditemukan dan perlu dievaluasi ulang.

dan navigator, window, console, tidak satupun dari mereka ada dan perlu dievaluasi ulang. Aku pernah meniru itu. cukup tutup dan buka konsol beberapa kali.


5
goodness gracious TERIMA KASIH untuk benar-benar membaca pertanyaan dan menjawab masalah dengan evaluasi ulang.
marknadal

8
Bekerja untuk saya juga. Inilah mengapa akan ada pesta di seluruh dunia saat IE mati.
voltrevo

Menutup dan membuka konsol berhasil untuk saya. Perilaku aneh dibandingkan dengan Firefox atau Chrome (tapi itu IE, jadi angka itu.)
Ectropy

7

Sebuah cukup aman & ringkas cara untuk mendeteksi IE 11 hanya adalah

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

atau sesuatu seperti ini
var IE11= !!window.msCrypto;


msCryptoadalah versi objek yang diawali window.cryptodan hanya diimplementasikan di IE 11.
https://developer.mozilla.org/en-US/docs/Web/API/Window/crypto


Satu-satunya solusi yang berfungsi (itulah yang terpendek, paling bersih, dan paling elegan)! Royi Namir juga /x64|x32/ig.test(window.navigator.userAgent)berlaku untuk Firefox!
Sándor Zuboly

4

Dan bagaimana saya menerapkan ini

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

1
Saya pikir Anda memiliki kesalahan ketik dalam fungsi Anda. Pertama, lakukan pengecekan kondisi, mana yang tidak digunakan. Kedua, mungkin maksud Anda && "ActiveXObject" in window. Ketiga: apa trik dengan negasi ganda !!?
dma_k

1
!! cukup banyak berarti 'Paksa ke boolean'.
Andrew Grey

4

Oke coba ini, sederhana dan untuk IE11 dan IE versi di bawah 11

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

navigator.userAgent.toUpperCase().indexOf("TRIDENT/") != -1untuk versi IE 11 navigator.userAgent.toUpperCase().indexOf("MSIE") != -1untuk versi IE di bawah 11

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

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


2

Tautan ini sangat membantu . Ini berisi kode javascript untuk mendeteksi semua versi IE hingga IE11. Saya menguji skrip dengan emulator IE11. Untuk menemukan emulator IE11, klik kanan di browser web, klik "Inspect element". Di kiri bawah halaman, scroll ke bawah bilah navigasi dan klik ikon desktop. Kotak dropdown "User Agent String" berisi opsi untuk meniru IE6-11.

Berhasil. Saya hanya menggunakannya beberapa menit sebelum menulis jawaban ini. Tidak dapat memposting snapshot - reputasi tidak cukup.


Ini kodenya - ikuti tautan untuk melihatnya lagi:

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

Menggunakan RegExp ini tampaknya berfungsi untuk IE 10 dan IE 11:

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

Saya tidak memiliki IE yang lebih tua dari IE 10 untuk menguji ini.


0

Gunakan Navigator: -

Ini navigatoradalah objek yang berisi semua informasi tentang browser mesin klien.

navigator.appName mengembalikan nama browser mesin klien.

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 adalah Netscape di IE 11. Mereka melakukan apa saja untuk mengelabui pengembang.
kagronick

0

Saya menemukan IE11 memberikan lebih dari satu string agen pengguna di lingkungan yang berbeda.

Daripada mengandalkan MSIE, dan pendekatan lainnya, Lebih baik mengandalkan Tridentversi

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

Semoga ini membantu :)

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.