JavaScript'te IE sürümünü (v9'dan önce) algılama


246

Web sitemizin kullanıcılarını Internet Explorerv9 sürümünden önceki bir sürümünü kullanıyorlarsa bir hata sayfasına geri döndürmek istiyorum . Destek için zaman ve paraya değmez IE pre-v9. Diğer tüm IE olmayan tarayıcıların kullanıcıları iyidir ve sekilmemelidir. Önerilen kod:

if(navigator.appName.indexOf("Internet Explorer")!=-1){     //yeah, he's using IE
    var badBrowser=(
        navigator.appVersion.indexOf("MSIE 9")==-1 &&   //v9 is ok
        navigator.appVersion.indexOf("MSIE 1")==-1  //v10, 11, 12, etc. is fine too
    );

    if(badBrowser){
        // navigate to error page
    }
}

Bu kod işe yarayacak mı?

Muhtemelen yoluma gelecek birkaç yorumu yapmak için:

  1. Evet, kullanıcıların useragentdizelerini taklit edebileceklerini biliyorum . Endişelenmiyorum.
  2. Evet, programlama profesyonellerinin tarayıcı türü yerine özellik desteğini koklamayı tercih ettiğini biliyorum, ancak bu yaklaşımın bu durumda mantıklı olduğunu düşünmüyorum. Tüm (alakalı) IE olmayan tarayıcıların ihtiyacım olan özellikleri desteklediğini ve tüm pre-v9 IEtarayıcıların desteklemediğini zaten biliyorum . Site genelinde özelliklerin kontrol edilmesi israf olacaktır.
  3. Evet, IE v1(veya> = 20) kullanarak siteye erişmeye çalışan birinin 'badBrowser' değerini true olarak ayarlayamayacağını ve uyarı sayfasının düzgün görüntülenmeyeceğini biliyorum. Bu, almaya istekli olduğumuz bir risk.
  4. Evet, Microsoft'un hassas tarayıcı sürümü algılaması için kullanılabilen "koşullu yorumları" olduğunu biliyorum. IE artık koşullu yorumları desteklemiyor ve IE 10bu yaklaşımı kesinlikle işe yaramaz hale getiriyor.

Dikkat edilmesi gereken başka bariz konular var mı?


122
Msgstr "IE pre-v9'u desteklemek bizim zaman ve paramızı değmez" Keşke yapabilseydim.
Hassan

2
[2] noktasına dayanarak Modernizr ( en.wikipedia.org/wiki/Modernizr ) önerilmeyeceğim - herkes kumda bir yerde bir çizgi çizmek zorunda - ama IE9 yüksek bir çizgi gibi görünüyor
amelvin

1
Koşullu yorumlar normal yorumlardır. Sadece IE bunları özel olanlar olarak yorumlar. IE10 + artık bunu yapmayacak.
Andreas

3
Koşullu yorumlar IE 10 tarafından IE olmayan tarayıcılarla tamamen aynı şekilde ele alınacaktır. Bunlar geçerli HTML yorumlarıdır, dolayısıyla bu şekilde ele alınacaktır. Andreas ile aynı fikirdeyim ve şartlı yorumların gidilecek yol olduğunu düşünüyorum.
Tim Down

1
IE10 + 'nın koşullu yorumları desteklemeyeceğini belirten resmi belgeler: blogs.msdn.com/b/ie/archive/2011/07/06/… - Teşekkürler: stackoverflow.com/a/9900331/320399
blong

Yanıtlar:


354

Bu benim tercih ettiğim yöntem. Maksimum kontrol sağlar. (Not: Koşullu ifadeler yalnızca IE5 - 9'da desteklenir.)

İlk önce ie sınıflarınızı doğru ayarlayın

<!DOCTYPE html>
<!--[if lt IE 7]> <html class="lt-ie9 lt-ie8 lt-ie7"> <![endif]-->
<!--[if IE 7]>    <html class="lt-ie9 lt-ie8"> <![endif]-->
<!--[if IE 8]>    <html class="lt-ie9"> <![endif]-->
<!--[if gt IE 8]><!--> <html> <!--<![endif]-->    
<head>

Ardından, stil istisnaları yapmak için CSS'yi kullanabilirsiniz veya gerekirse basit bir JavaScript ekleyebilirsiniz:

(function ($) {
    "use strict";

    // Detecting IE
    var oldIE;
    if ($('html').is('.lt-ie7, .lt-ie8, .lt-ie9')) {
        oldIE = true;
    }

    if (oldIE) {
        // Here's your JS for IE..
    } else {
        // ..And here's the full-fat code for everyone else
    }

}(jQuery));

Paul Irish'a teşekkürler .


21
OP'nin tamamen JavaScript çözümü istediği göz önüne alındığında, aşağıdaki @Tim Down tarafından verilen cevabın daha iyi olduğuna inanıyorum, çünkü mevcut HTML'yi değiştirmeyi içermiyor, ayrıca jQuery kullanmıyor: stackoverflow.com/a/10965203/134120
AsGoodAsItGets

Ben w3 html doğrulayıcı üzerinde bir hata alıyorum:Error: Saw <!-- within a comment. Probable cause: Nested comment (not allowed). At line 5, column 21 if gt IE 8]><!--><html
abumalick

161

IE sürümünü döndürün veya IE değilse yanlış döndürün

function isIE () {
  var myNav = navigator.userAgent.toLowerCase();
  return (myNav.indexOf('msie') != -1) ? parseInt(myNav.split('msie')[1]) : false;
}

Misal:

if (isIE () == 8) {
 // IE8 code
} else {
 // Other versions IE or not IE
}

veya

if (isIE () && isIE () < 9) {
 // is IE version less than 9
} else {
 // is IE 9 and later or not IE
}

veya

if (isIE()) {
 // is IE
} else {
 // Other browser
}

36
IE11 için çalışmaz. IE 11'den UA dizesini değiştirdiler"mozilla/5.0 (windows nt 6.3; wow64; trident/7.0; .net4.0e; .net4.0c; media center pc 6.0; .net clr 3.5.30729; .net clr 2.0.50727; .net clr 3.0.30729; rv:11.0) like gecko"
Annie

22
FF'de "false <9" ifadesinin "true" olduğunu lütfen unutmayın. Yani, koşul şöyle olmalıif (isIE () && isIE () < 9) {
nZeus

3
@DeadlyChambers belki IE7 standart modunda çalışıyordu? msdn.microsoft.com/tr-tr/library/ie/cc196988(v=vs.85).aspx
mason81

4
Onaylanan cevap, IE sürümünün HTML'de nasıl algılanacağıdır. Bu orijinal soruyu cevaplar.
Matt Wagner

2
@PrasadGayan - Microsoft Edge Internet Explorer değil. Yani yanlış döndürmek onun için doğru bir şey gibi görünüyor.
BryanGrezeszak

120

Başka kimse bir addEventListeryöntem eklemediyse ve doğru tarayıcı modunu kullanıyorsanız, IE 8 veya daha azını

if (window.attachEvent && !window.addEventListener) {
    // "bad" IE
}

Eski Internet Explorer ve attachEvent (MDN)


7
Bu, IE <= 8'i tamamen JavaScript'te tespit etmenin en etkili yolu gibi görünüyor ve bunu yapmanın bir yolunu arayan benim gibi insanlar için harika.
Gregory Magarshak

Harika! Bu da aradığım şey olan Quirks Modunda IE9'u algılar.
sstur

7
Bu "kullanımı kolay" bir çözüm olsa da, bazı riskleri vardır. Şirketinizdeki (çözümünüzün farkında olmayan) herkes IE 8'deki eksiklikle başa çıkmak için "addEventListener" veya "attachEvent" uygulayabilir. Ve sonra kodunuz çalışmayı durduracaktır.
Zé Carlos

@RoyiNamir Bu IE8 için test eder. IE11'de neden dünyaya dönmeli?
Andreas

@ Üzgünüz. OP'nin ie9'dan önce istediğini görmedim. silme.
Royi Namir

114

Koşullu yorumları kullanın. IE <9 kullanıcılarını algılamaya çalışıyorsunuz ve koşullu yorumlar bu tarayıcılarda çalışacak; diğer tarayıcılarda (IE> = 10 ve IE olmayan), yorumlar normal HTML yorumları olarak kabul edilir.

Örnek HTML:

<!--[if lt IE 9]>
WE DON'T LIKE YOUR BROWSER
<![endif]-->

Gerekirse bunu yalnızca komut dosyasıyla da yapabilirsiniz:

var div = document.createElement("div");
div.innerHTML = "<!--[if lt IE 9]><i></i><![endif]-->";
var isIeLessThan9 = (div.getElementsByTagName("i").length == 1);
if (isIeLessThan9) {
    alert("WE DON'T LIKE YOUR BROWSER");
}

5
@Tim Down'un cevabının JavaScript sürümü benim için harika çalıştı. Windows 7 ve IE 8, 9, 10 ve 11 ile test etmek için BrowserStack kullandım; Safari 5.1, Firefox 28.0, Chrome 33.0 ve Opera 20.0 ile Mac OS X Snow Leopard; iPhone 5 Mobil Safari; ve Android Samsung Galaxy Tab 2 10.1 4.0. Beklendiği gibi, sadece IE8 bunun IeLessThan9 olduğunu bildirdi. Güzel!
Steve Saporta

58

MSIE'yi (v6 - v7 - v8 - v9 - v10 - v11) kolayca tespit etmek için:

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

Koşullu yorumları desteklemediğinden IE10'u tespit etmek için kullanışlıdır. IE11'de çalışmaz, ancak IE11'in genellikle iyi bir davranışı vardır
personne3000

11
Son olarak, özellik algılamayı kullanma hakkında konuşmayan ve aslında soruyu cevaplayan bir cevap.
cdmckay

32

AngularJS'nin IE'yi kontrol etme yöntemi

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

if (msie < 9) {
    // code for IE < 9
}

Vay canına, bu tüm koşullu yorumlardan çok daha basit! Bunun bir sınırlaması yok mu?
andrewb

belgelere göre, IE8 + bu özelliği destekler, bu yüzden çoğu durumda yeterli olması gerektiğini düşünüyorum.
iurii

MSDN başvurusuna göre, "Geçerli belge henüz belirlenmediğinde, documentMode sıfır (0) değerini döndürür. Bu genellikle bir belge yüklenirken olur." Bu, <head> içine yüklenmiş bir komut dosyasında geçerli bir yanıt alamayabileceğiniz anlamına mı geliyor?
Erik Knowles

Belge zaten yüklendiğinde window.onload'daki değeri kontrol ederek düzeltebileceğinizi düşünüyorum.
iurii


19

Özellik algılamayı kullanarak IE sürümünü algılama (IE6 +, IE6'dan önceki tarayıcılar 6 olarak algılanır, IE olmayan tarayıcılar için null değerini döndürür):

var ie = (function (){
    if (window.ActiveXObject === undefined) return null; //Not IE
    if (!window.XMLHttpRequest) return 6;
    if (!document.querySelector) return 7;
    if (!document.addEventListener) return 8;
    if (!window.atob) return 9;
    if (!document.__proto__) return 10;
    return 11;
})();

Edit: Size kolaylık sağlamak için bir bower / npm repo oluşturdum: ie-sürüm

Güncelleme:

daha kompakt bir sürüm bir satırda şu şekilde yazılabilir:

return window.ActiveXObject === undefined ? null : !window.XMLHttpRequest ? 6 : !document.querySelector ? 7 : !document.addEventListener ? 8 : !window.atob ? 9 : !document.__proto__ ? 10 : 11;

16

Bu işlev IE ana sürüm numarasını bir tamsayı olarak veya undefinedtarayıcı Internet Explorer değilse döndürür . Bu, tüm kullanıcı aracısı çözümleri gibi, kullanıcı aracısı kimlik sahtekarlığına (sürüm 8'den beri IE'nin resmi bir özelliği olan) uygundur.

function getIEVersion() {
    var match = navigator.userAgent.match(/(?:MSIE |Trident\/.*; rv:)(\d+)/);
    return match ? parseInt(match[1]) : undefined;
}

Owen, pratikte bunu nasıl kullanır? Dönüş değeri nasıl alınır? Denedim console.log(!!match && parseInt(match[1])), console.log(parseInt(match[1]))ve console.log(match)fakat bunlardan herhangi biri ile hiçbir sonuç.
Frank Conijn

İşlevin kendisini çağırarak dönüş değerini alın getIEVersion(). Örneğin:if (getIEVersion() < 9) {/* IE 8 or below */} if (!getIEVersion()) {/* Not IE */}
Owen

15

Koşullu yorumları kullanarak JS'de IE algılama

// ----------------------------------------------------------
// A short snippet for detecting versions of IE in JavaScript
// without resorting to user-agent sniffing
// ----------------------------------------------------------
// If you're not in IE (or IE version is less than 5) then:
//     ie === undefined
// If you're in IE (>=5) then you can determine which version:
//     ie === 7; // IE7
// Thus, to detect IE:
//     if (ie) {}
// And to detect the version:
//     ie === 6 // IE6
//     ie > 7 // IE8, IE9 ...
//     ie < 9 // Anything less than IE9
// ----------------------------------------------------------

// UPDATE: Now using Live NodeList idea from @jdalton

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]
    );

    return v > 4 ? v : undef;

}());

Bu benim cevabımla hemen hemen aynı.
Tim Down

@TimDown: Belki de, ama bu cevap biraz daha özellikli (size sürüm numarasını söyler) ve iyi yorumlanmış. Buna ek olarak, bu cevabın başlangıcındaki bağlantı, çeşitli bilgilendirici yorumları ve bu teknikle ilgili ilginç varyasyonları olan bir Gist'e yol açar.
Alan

@Alan: Fuar puanları. Benimkini soruya uyarladım ama kaynak göstermedim.
Tim Down

12

Bu benim için çalışıyor. Bunu neden <IE9'u sevmediğimizi ve tercih ettiğimiz tarayıcılara bağlantılar sağladığımızı açıklayan bir sayfaya yönlendirme olarak kullanıyorum.

<!--[if lt IE 9]>
<meta http-equiv="refresh" content="0;URL=http://google.com">
<![endif]-->

1
Ohw, bu iğrenç biri. Daha kolay bir yöntem kullanıyorum, IE uyarısı ile bir div görüntülüyorum ve ziyaretçi üzerine tıkladığında kullanıcı browsehappy.com'a
Codebeat

10

Kodunuz kontrolü yapabilir, ancak düşündüğünüz gibi, birisi IE v1 veya> v19 kullanarak sayfanıza erişmeye çalışırsa hatayı almayacaktır, bu nedenle aşağıdaki kod gibi Regex ifadesi ile daha güvenli bir şekilde kontrol yapın:

var userAgent = navigator.userAgent.toLowerCase();
// Test if the browser is IE and check the version number is lower than 9
if (/msie/.test(userAgent) && 
    parseFloat((userAgent.match(/.*(?:rv|ie)[\/: ](.+?)([ \);]|$)/) || [])[1]) < 9) {
  // Navigate to error page
}

Bu iyi bir cevap değil. UA koklama güvenilmezdir. Burada daha fazlası: modernizr.com/docs
Jezen Thomas

3
@Jezen Bazen UA koklama gitmek için bir yoldur: github.com/Modernizr/Modernizr/issues/538
István Ujj-Mészáros

8

Microsoft başvuru sayfasında belirtildiği gibi Sürüm 10'dan itibaren IE'de koşullu yorumlar artık desteklenmemektedir .

var ieDetector = function() {
  var browser = { // browser object

      verIE: null,
      docModeIE: null,
      verIEtrue: null,
      verIE_ua: null

    },
    tmp;

  tmp = document.documentMode;
  try {
    document.documentMode = "";
  } catch (e) {};

  browser.isIE = typeof document.documentMode == "number" || eval("/*@cc_on!@*/!1");
  try {
    document.documentMode = tmp;
  } catch (e) {};

  // We only let IE run this code.
  if (browser.isIE) {
    browser.verIE_ua =
      (/^(?:.*?[^a-zA-Z])??(?:MSIE|rv\s*\:)\s*(\d+\.?\d*)/i).test(navigator.userAgent || "") ?
      parseFloat(RegExp.$1, 10) : null;

    var e, verTrueFloat, x,
      obj = document.createElement("div"),

      CLASSID = [
        "{45EA75A0-A269-11D1-B5BF-0000F8051515}", // Internet Explorer Help
        "{3AF36230-A269-11D1-B5BF-0000F8051515}", // Offline Browsing Pack
        "{89820200-ECBD-11CF-8B85-00AA005B4383}"
      ];

    try {
      obj.style.behavior = "url(#default#clientcaps)"
    } catch (e) {};

    for (x = 0; x < CLASSID.length; x++) {
      try {
        browser.verIEtrue = obj.getComponentVersion(CLASSID[x], "componentid").replace(/,/g, ".");
      } catch (e) {};

      if (browser.verIEtrue) break;

    };
    verTrueFloat = parseFloat(browser.verIEtrue || "0", 10);
    browser.docModeIE = document.documentMode ||
      ((/back/i).test(document.compatMode || "") ? 5 : verTrueFloat) ||
      browser.verIE_ua;
    browser.verIE = verTrueFloat || browser.docModeIE;
  };

  return {
    isIE: browser.isIE,
    Version: browser.verIE
  };

}();

document.write('isIE: ' + ieDetector.isIE + "<br />");
document.write('IE Version Number: ' + ieDetector.Version);

sonra kullan:

if((ieDetector.isIE) && (ieDetector.Version <= 9))
{

}

1
Bu, tüm ağda çalışan tek şeydi, en azından denediğim şeylerin humongusu ... thx;)
Henrique

Bu kod iyi, ancak uyumluluk görüntüleme modunu algılayamıyor. IE 8 IE 8 uyumluluk görünümünü kullanarak ve bu kod hala version 11EDIT veriyoruz : Bu kod ŞAŞIRTICI! haha, içinde her şey olan bir nesne veriyor. Sürüm 11, ancak docModeIR 9'a eşit. Teşekkürler!
MarceloBarbosa

5

10 ve 11 için:

Koşullu yorumların standardını korumak için js kullanabilir ve html'de bir sınıf ekleyebilirsiniz :

  var ua = navigator.userAgent,
      doc = document.documentElement;

  if ((ua.match(/MSIE 10.0/i))) {
    doc.className = doc.className + " ie10";

  } else if((ua.match(/rv:11.0/i))){
    doc.className = doc.className + " ie11";
  }

Veya bowser gibi bir lib kullanın:

https://github.com/ded/bowser

Veya özellik tespiti için modernizr:

http://modernizr.com/


2
Birkaç senaryo ve çözüm denedim ama hiçbir şey işe yaramadı. Sonra projeye bowser dahil ve sadece çalıştı. Yani bir tane bowser önerdi.
Moulde

3

Internet Explorer 10 | 11'i algılamak için bu küçük komut dosyasını gövde etiketinden hemen sonra kullanabilirsiniz:

Benim durumumda kafasına yüklü jQuery kütüphanesi kullanıyorum.

<!DOCTYPE HTML>
<html>
<head>
    <script src="//code.jquery.com/jquery-1.11.0.min.js"></script>
</head>
<body>
    <script>if (navigator.appVersion.indexOf('Trident/') != -1) $("body").addClass("ie10");</script>
</body>
</html>

Bunu beğendim, önceki sürümleri desteklemediğim için sadece 10 veya 11'i tespit etmem gerekiyor
Nearpoint

IE9 da trident, ancak CSS desteği ile aynı değil. Algılamanın en az 10 olduğunu düşünüyor ama bu doğru değil.
Codebeat

3

Bu ölüme cevaplandı, ama tek ihtiyacınız olan bu.

!!navigator.userAgent.match(/msie\s[5-8]/i)

Ayrıca, en yaygın IE kullanıcı aracısı dizelerine karşı normal ifade desenini gösteren bir sanal alan: regex101.com/r/lC6oP3/1
Timothy Perez

@alessadro - Ama olması gerekiyordu, değil mi? OP <9 ...
nnnnnn

2
var Browser = new function () {
    var self = this;
    var nav = navigator.userAgent.toLowerCase();
    if (nav.indexOf('msie') != -1) {
        self.ie = {
            version: toFloat(nav.split('msie')[1])
        };
    };
};


if(Browser.ie && Browser.ie.version > 9)
{
    // do something
}

2

Microsoft'a göre , aşağıdaki en iyi çözümdür, aynı zamanda çok basittir:

function getInternetExplorerVersion()
// Returns the version of Internet Explorer or a -1
// (indicating the use of another browser).
{
    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 );
}

Gerçekten de, bir başkasının yukarıdakileri kullanmaya çalışırken buraya gelmesi durumunda, daha sonraki bir cevaptaki kod IE11 için çalışır ( stackoverflow.com/a/26375930/1129926 ). Ama dikkat edin, IE12, vb için çalışacak mı? Alt satırda, bunları geçici kesmek olarak kabul etmek en iyisidir ve daha sonra yeni tarayıcı sürümleri yayınlandıkça başarısız olurlar (Edge'den bile bahsetmeyeceğim).
Jeff Mergler

1

Bu kodu hemen onuncu kez yeniden yazmamanızı tavsiye ederim. Conditionizr kütüphanesini kullanmanızı öneririm ( http://conditionizr.com/Belirli IE sürümlerini ve diğer tarayıcıları, işletim sistemlerini ve hatta Retina ekranların varlığını veya yokluğunu test edebilen ) .

Kodu yalnızca ihtiyacınız olan belirli testler için ekleyin ve ayrıca birçok yinelemeden geçen (ve kodunuzu kırmadan yükseltmesi kolay olan) test edilmiş bir kütüphaneden yararlanabilirsiniz.

Ayrıca, belirli bir tarayıcıdan ziyade belirli bir yetenek için testten daha iyi olduğunuz tüm durumları işleyebilen Modernizr ile güzel bir şekilde bağlantı kurar.


1

Bunu beğendim:

<script>
   function isIE () {
       var myNav = navigator.userAgent.toLowerCase();
       return (myNav.indexOf('msie') != -1) ? parseInt(myNav.split('msie')[1]) : false;
   }    
   var ua = window.navigator.userAgent;
   //Internet Explorer | if | 9-11

   if (isIE () == 9) {
       alert("Shut down this junk! | IE 9");
   } else if (isIE () == 10){
       alert("Shut down this junk! | IE 10");
   } else if (ua.indexOf("Trident/7.0") > 0) {
       alert("Shut down this junk! | IE 11");
   }else{
       alert("Thank god it's not IE!");
   }

</script>

1

IE tespitine yönelik bu yaklaşım, koşullu yorumlar kullanarak jKey'in cevabının ve kullanıcı aracılarını kullanarak Owen'ın cevabının güçlü yanlarını birleştirir ve zayıflıklarını önler.

  • jKey'in yaklaşımı, sürüm 9'a kadar çalışır ve IE 8 ve 9'da kullanıcı aracısı sahtekarlığına karşı bağışıktır.
  • Owen'ın yaklaşımı IE 5 ve 6'da başarısız olabilir (raporlama 7) ve UA sahteciliğine karşı hassastır, ancak IE sürümleri> = 10'u tespit edebilir (şimdi Owen'in cevabını veren 12 de dahil).

    // ----------------------------------------------------------
    // A short snippet for detecting versions of IE
    // ----------------------------------------------------------
    // If you're not in IE (or IE version is less than 5) then:
    //     ie === undefined
    // Thus, to detect IE:
    //     if (ie) {}
    // And to detect the version:
    //     ie === 6 // IE6
    //     ie > 7 // IE8, IE9 ...
    // ----------------------------------------------------------
    var ie = (function(){
        var v = 3,
            div = document.createElement('div'),
            all = div.getElementsByTagName('i');
    
        while (
            div.innerHTML = '<!--[if gt IE ' + (++v) + ']><i></i><![endif]-->',
            all[0]
        );
        if (v <= 4) { // Check for IE>9 using user agent
            var match = navigator.userAgent.match(/(?:MSIE |Trident\/.*; rv:|Edge\/)(\d+)/);
            v = match ? parseInt(match[1]) : undefined;
        }
        return v;
    }());

Bu, IE sürümünü içeren belgenize faydalı sınıflar ayarlamak için kullanılabilir:

    if (ie) {
        document.documentElement.className += ' ie' + ie;
        if (ie < 9)
            document.documentElement.className += ' ieLT9';
    }

IE uyumluluk modundaysa, kullanılan uyumluluk modunu algıladığını unutmayın. Ayrıca IE sürümünün daha eski sürümler için yararlı olduğunu unutmayın (<10); daha yüksek sürümler daha standartlarla uyumludur ve bunun yerine modernizr.js gibi bir özellik kullanarak özellikleri kontrol etmek daha iyidir.


1

Bunun için uygun bir alt çizgi karışımı yaptım.

_.isIE();        // Any version of IE?
_.isIE(9);       // IE 9?
_.isIE([7,8,9]); // IE 7, 8 or 9?

_.mixin({
  isIE: function(mixed) {
    if (_.isUndefined(mixed)) {
      mixed = [7, 8, 9, 10, 11];
    } else if (_.isNumber(mixed)) {
      mixed = [mixed];
    }
    for (var j = 0; j < mixed.length; j++) {
      var re;
      switch (mixed[j]) {
        case 11:
          re = /Trident.*rv\:11\./g;
          break;
        case 10:
          re = /MSIE\s10\./g;
          break;
        case 9:
          re = /MSIE\s9\./g;
          break;
        case 8:
          re = /MSIE\s8\./g;
          break;
        case 7:
          re = /MSIE\s7\./g;
          break;
      }

      if (!!window.navigator.userAgent.match(re)) {
        return true;
      }
    }

    return false;
  }
});

console.log(_.isIE());
console.log(_.isIE([7, 8, 9]));
console.log(_.isIE(11));
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>


1

ya da sadece

//   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: 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 isIE = navigator.userAgent.match(/MSIE|Trident|Edge/)
var IEVersion = ((navigator.userAgent.match(/(?:MSIE |Trident.*rv:|Edge\/)(\d+(\.\d+)?)/)) || []) [1]

0

IE sürümlerini kontrol etmek için bulduğum en kapsamlı JS betiği http://www.pinlady.net/PluginDetect/IE/ . Kütüphanenin tamamı http://www.pinlady.net/PluginDetect/Browsers/ adresindedir. .

IE10 ile koşullu ifadeler artık desteklenmemektedir.

IE11 ile, kullanıcı aracısı artık MSIE içermiyor. Ayrıca, kullanıcı aracısını kullanmak güvenilir değildir, çünkü bu değiştirilebilir.

PluginDetect JS komut dosyasını kullanarak, belirli IE sürümlerini hedefleyen çok özel ve iyi hazırlanmış bir kod kullanarak IE'yi algılayabilir ve kesin sürümleri algılayabilirsiniz. Tam olarak hangi tarayıcı sürümü ile çalıştığınıza dikkat ettiğinizde bu çok kullanışlıdır.


0

Burada partiye biraz geç kaldığımı fark ettim, ancak bir tarayıcının IE olup olmadığı ve 10'dan hangi sürümün olduğu hakkında geri bildirim sağlamak için basit bir satır yolunu kontrol ediyordum. Bunu sürüm 11 için kodlamadım, bu yüzden belki de bunun için küçük bir değişiklik gerekecektir.

Bununla birlikte, kod budur, bir özelliği ve yöntemi olan bir nesne olarak çalışır ve navigator nesnesini kazımak yerine nesne saptamaya dayanır (bu sahte olabilir gibi büyük ölçüde kusurludur).

var isIE = { browser:/*@cc_on!@*/false, detectedVersion: function () { return (typeof window.atob !== "undefined") ? 10 : (typeof document.addEventListener !== "undefined") ? 9 : (typeof document.querySelector !== "undefined") ? 8 : (typeof window.XMLHttpRequest !== "undefined") ? 7 : (typeof document.compatMode !== "undefined") ? 6 : 5; } };

Kullanım, isIE.browserbir boole döndüren ve koşullu yorumlara dayanan bir özelliktir.isIE.detectedVersion() 5 ile 10 arasında bir sayı döndüren bir . 6'dan düşük bir şey olduğunuzu ve ciddi eski okul topraklarında olduğunuzu varsayalım ve bir astar ve 10'dan daha yüksek bir şey ve daha yeni bir bölgede. IE11 hakkında koşullu yorumları desteklemeyen bir şey okudum ama tam olarak araştırmadım, belki daha sonraki bir tarih için.

Her neyse, olduğu gibi ve bir astar için, IE tarayıcı ve sürüm algılamanın temellerini kapsayacaktır. Mükemmel olmaktan uzak, ama küçük ve kolayca değiştirilebilir.

Sadece referans olarak ve eğer bunun gerçekte nasıl uygulanacağı konusunda herhangi bir şüphe varsa, aşağıdaki koşul yardımcı olacaktır.

var isIE = { browser:/*@cc_on!@*/false, detectedVersion: function () { return (typeof window.atob !== "undefined") ? 10 : (typeof document.addEventListener !== "undefined") ? 9 : (typeof document.querySelector !== "undefined") ? 8 : (typeof window.XMLHttpRequest !== "undefined") ? 7 : (typeof document.compatMode !== "undefined") ? 6 : 5; } };

/* testing IE */

if (isIE.browser) {
  alert("This is an IE browser, with a detected version of : " + isIE.detectedVersion());
}

0

IE ve sürümlerini tespit etmek daha kolay olamazdı ve ihtiyacınız olan tek şey biraz yerli / vanilya Javascript:

var uA = navigator.userAgent;
var browser = null;
var ieVersion = null;

if (uA.indexOf('MSIE 6') >= 0) {
    browser = 'IE';
    ieVersion = 6;
}
if (uA.indexOf('MSIE 7') >= 0) {
    browser = 'IE';
    ieVersion = 7;
}
if (document.documentMode) { // as of IE8
    browser = 'IE';
    ieVersion = document.documentMode;
}

Ve bu onu kullanmanın bir yolu:

if (browser == 'IE' && ieVersion <= 9) 
    document.documentElement.className += ' ie9-';

.

Daha düşük Uyumluluk Görünümü / Modunda daha yüksek sürümler de dahil olmak üzere tüm IE sürümlerinde çalışır ve documentModeIE'ye özeldir.


0

IE Tarayıcı sürümünü silmeniz gerekiyorsa aşağıdaki kodu takip edebilirsiniz. Bu kod IE6 - IE11 sürümü için iyi çalışıyor

<!DOCTYPE html>
<html>
<body>

<p>Click on Try button to check IE Browser version.</p>

<button onclick="getInternetExplorerVersion()">Try it</button>

<p id="demo"></p>

<script>
function getInternetExplorerVersion() {
   var ua = window.navigator.userAgent;
        var msie = ua.indexOf("MSIE ");
        var rv = -1;

        if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./))      // If Internet Explorer, return version number
        {               
            if (isNaN(parseInt(ua.substring(msie + 5, ua.indexOf(".", msie))))) {
                //For IE 11 >
                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);
                        alert(rv);
                    }
                }
                else {
                    alert('otherbrowser');
                }
            }
            else {
                //For < IE11
                alert(parseInt(ua.substring(msie + 5, ua.indexOf(".", msie))));
            }
            return false;
        }}
</script>

</body>
</html>

0

IE10 penceresi otomatik olarak IE11 + 'ya güncellenecek ve W3C standardize edilecektir

Günümüzde IE8-

    <!DOCTYPE html>
    <!--[if lt IE 9]><html class="ie ie8"><![endif]-->
    <!--[if IE 9]><html class="ie ie9"><![endif]-->
    <!--[if (gt IE 9)|!(IE)]><!--><html><!--<![endif]-->
    <head>
        ...
        <!--[if lt IE 8]><meta http-equiv="Refresh" content="0;url=/error-browser.html"><![endif]--
        ...
    </head>

0
var isIE9OrBelow = function()
{
   return /MSIE\s/.test(navigator.userAgent) && parseFloat(navigator.appVersion.split("MSIE")[1]) < 10;
}

0
if (!document.addEventListener) {
    // ie8
} else if (!window.btoa) {
    // ie9
}
// others
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.