Internet Explorer 11 algılama


125

IE 11'in diğer tüm IE'lerden farklı kullanıcı aracı dizisine sahip olduğunu biliyorum

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

Bu soruya verilen cevapla IE 11'i tespit etmeye çalıştım '

Jquery, IE 11'i algılayamıyor

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

Ama hata alıyorum Object not found and needs to be re-evaluated.

Sonra IE11'de geliştirici konsolunu açtım ve önceden tanımlanmış bazı javascript nesnelerine erişmeye çalıştım, hala aynı hatayı alıyorum.

denedim

navigator.userAgent

window.navigator

console.log('test');

Bunun hakkında bir fikri olan var mı?


@Bobkhin Sorunumun üstünde bahsetmiştim. hata almaObject not found and needs to be re-evaluated.
Miqdad Ali


Yanıtlar:


188

Düzenle 18 Kasım 2016

Bu kod da çalışır ( ActiveX kullanmadan başka bir çözümü tercih edenler için )

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

Orijinal Cevap

Ie11'i kontrol etmek için şunu kullanabilirsiniz: (test edildi)

(veya işletilen bu )

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

IE'nin tüm VMS'lerine sahibim:

görüntü açıklamasını buraya girin

görüntü açıklamasını buraya girin

görüntü açıklamasını buraya girin

görüntü açıklamasını buraya girin

Uyarı: Bu IE11 için çalışmayacak:

burada görebileceğiniz gibi, doğru döndürüyor:

görüntü açıklamasını buraya girin

Öyleyse ne yapabiliriz :

Görünüşe göre, makine bit alanını eklediler:

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"

böylece yapabiliriz:

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

bu yalnızca ie11 için doğru olarak dönecektir.


1
@Jan. Evet. yalnızca IE11 tüm bu koşul için doğru dönecektir. Az önce <11'in yanlış dönüşünü gösterdim.
Royi Namir

1
@IanSteffy Bu sadece işlemin sonucunu (!) Göstermek içindir. Bir HTML dosyası açıp komut dosyası etiketi ekleyebilir ve bu komut dosyasının içinde komutu çalıştırabilirsiniz. İşte bunu çalıştırın .
Royi Namir

2
x64hem Chrome hem de Edge
Gene R

3
Bekle, bir IE12 mi var? IE11'in sonuncusu olduğunu ve yakında o aptal tarayıcı için artık endişelenmemize gerek kalmayacağını düşündüm! ☹
Michael Scheper

1
Does not Windows 7 Enterprise üzerinde benim IE 11.0.9600.19431 için çalışıyorum. Yok window.MSInputMethodContext.
Heinrich Ulbricht

105

MSIE'yi (sürüm 6'dan 11'e) hızlı bir şekilde tespit etmek için:

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

2
İkinci gerekmiyor indexOf()olmak > -1?
yeniden düzenlendi

Evet, "Trident /" gösterileri yukarı çok uzak appVersion dizesine anyways- o>> 0 olduğunu ve neden -1 biliyorum ama yok
chrismarx

22

IE'nin 9, 10 ve 11 sürümünü tespit etmek için aşağıdaki işlevi kullanıyorum:

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

Yukarıdaki yanıtların tümü, pencereniz veya gezgininiz olmadığından bahsettiğiniz gerçeğini görmezden geliyor :-)

Sonra IE11'de geliştirici konsolunu açtım

ve söylediği yer burası

Nesne bulunamadı ve yeniden değerlendirilmesi gerekiyor.

ve gezgin, pencere, konsol, hiçbiri mevcut değil ve yeniden değerlendirilmesi gerekiyor. Bunu öykünme olarak yaşadım. konsolu birkaç kez kapatıp açın.


5
Tanrı aşkına, soruyu gerçekten okuduğunuz ve sorunu yeniden değerlendirerek yanıtladığınız için TEŞEKKÜR EDERİZ.
marknadal

8
Benim için de çalıştı. Bu yüzden IE öldüğünde dünyanın her yerinde parti olacak.
voltrevo

Konsolu kapatmak ve açmak benim için çalıştı. Firefox veya Chrome ile karşılaştırıldığında garip davranış (ama IE, öyle rakamlar.)
Ectropy

7

Oldukça güvenli ve özlü bir yolu tespit etmek için IE 11, yalnızca bir

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

ya da bunun gibi bir şey
var IE11= !!window.msCrypto;


msCryptowindow.cryptonesnenin önekli bir sürümüdür ve yalnızca IE 11'de uygulanır.
https://developer.mozilla.org/en-US/docs/Web/API/Window/crypto


Tek çalışan çözüm (bu en kısa, en temiz ve en zarif olanıdır)! Royi Namir /x64|x32/ig.test(window.navigator.userAgent), Firefox için de geçerli!
seekdor Zuboly

4

Ve bunu nasıl uyguladım

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

1
İşlevinde bir yazım hatası olduğunu düşünüyorum. İlk olarak, kullanılmayan durum kontrolünü yaparsınız. İkincisi, belki de demek istiyorsun && "ActiveXObject" in window. Üçüncüsü: çifte olumsuzlamanın hilesi !!nedir?
dma_k

1
!! hemen hemen 'Coerce to boolean' anlamına gelir.
Andrew Gray

4

Tamam, bunu deneyin, basit ve IE11 ve IE için 11 sürümün altında

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

navigator.userAgent.toUpperCase().indexOf("TRIDENT/") != -111 sürümün navigator.userAgent.toUpperCase().indexOf("MSIE") != -1altında IE için IE 11 sürümü için

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

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


2

Bu bağlantı yardımcı oldu . IE'nin IE11'e kadar tüm sürümlerini algılamak için javascript kodunu içerir. Komut dosyasını IE11 öykünücüsü ile test ettim. IE11 öykünücüsünü bulmak için web tarayıcısına sağ tıklayın "Öğeyi incele" seçeneğine tıklayın. Sayfanın sol alt tarafında, gezinme çubuğunu aşağı kaydırın ve masaüstü simgesini tıklayın. "Kullanıcı Aracısı Dizesi" açılır kutusu, IE6-11'e öykünmek için seçenekler içerir.

İşe yarıyor. Bu cevabı yazmadan birkaç dakika önce kullandım. Anlık görüntüler gönderilemiyor - yeterli itibar yok.


Bu koddur - tekrar görüntülemek için bağlantıyı takip edin:

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

Bu RegExp'i kullanmak IE 10 ve IE 11 için çalışıyor gibi görünüyor:

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

Bunu test etmek için IE 10'dan daha eski bir IE'ye sahip değilim.


0

Gezgini Kullan: -

navigatorİstemci makinenin tarayıcı hakkında tüm bilgileri içeren bir nesnedir.

navigator.appName istemci makinenin tarayıcısının adını döndürür.

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, IE 11'de Netscape'tir. Geliştiricileri kandırmak için ellerinden gelen her şeyi yaptılar.
kagronick

0

IE11'in farklı ortamlarda birden fazla kullanıcı aracısı dizisi verdiğini öğrendim.

Güvenmek MSIEve diğer yaklaşımlara güvenmek yerine , Tridentsürüme güvenmek daha iyidir

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

Bu yardımcı olur umarım :)

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.