Rileva la versione di IE (precedente alla v9) in JavaScript


246

Voglio rimandare gli utenti del nostro sito Web a una pagina di errore se utilizzano una versione Internet Explorerprecedente alla v9. Non vale la pena dedicare tempo e denaro al nostro supporto IE pre-v9. Gli utenti di tutti gli altri browser non IE stanno bene e non devono essere rimbalzati. Ecco il codice proposto:

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

Questo codice farà il trucco?

Per evitare alcuni commenti che probabilmente mi verranno incontro:

  1. Sì, so che gli utenti possono forgiare la loro useragentstringa. Non mi preoccupo
  2. Sì, so che i professionisti della programmazione preferiscono annusare il supporto delle funzionalità anziché il tipo di browser, ma in questo caso non credo che questo approccio abbia senso. So già che tutti i browser (pertinenti) non IE supportano le funzionalità di cui ho bisogno e che non tutti i pre-v9 IEbrowser. Controllare funzionalità per funzionalità in tutto il sito sarebbe uno spreco.
  3. Sì, so che qualcuno che tenta di accedere al sito utilizzando IE v1(o> = 20) non imposterà 'badBrowser' su true e la pagina di avviso non verrà visualizzata correttamente. È un rischio che siamo disposti a correre.
  4. Sì, so che Microsoft ha "commenti condizionali" che possono essere utilizzati per il rilevamento preciso della versione del browser. IE non supporta più i commenti condizionali a partire da IE 10, rendendo questo approccio assolutamente inutile.

Qualche altro ovvio problema di cui essere a conoscenza?


122
"Non vale la pena spendere tempo e denaro per supportare IE pre-v9". Vorrei poterlo fare.
Hassan,

2
Sulla base del punto [2] non suggerirò Modernizr ( en.wikipedia.org/wiki/Modernizr ) - tutti devono tracciare una linea nella sabbia da qualche parte - ma IE9 sembra una linea alta
amelvin

1
I commenti condizionali sono solo commenti normali. Solo IE li interpreta come speciali. IE10 + non lo farà più.
Andreas,

3
I commenti condizionali saranno trattati esattamente allo stesso modo da IE 10 come browser non IE. Sono commenti HTML validi, quindi verranno trattati come tali. Sono d'accordo con Andreas e penso che i commenti condizionali siano la strada da percorrere.
Tim Down

1
La documentazione ufficiale che dice che IE10 + non supporterà i commenti condizionali: blogs.msdn.com/b/ie/archive/2011/07/06/… - Grazie a: stackoverflow.com/a/9900331/320399
blong

Risposte:


354

Questo è il mio modo preferito di farlo. Dà il massimo controllo. (Nota: le istruzioni condizionali sono supportate solo in IE5 - 9.)

Innanzitutto imposta correttamente le tue classi ie

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

Quindi puoi semplicemente usare CSS per fare eccezioni di stile o, se necessario, puoi aggiungere un semplice JavaScript:

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

Grazie a Paul Irish .


21
Dato che l'OP ha richiesto una soluzione puramente JavaScript, credo che la risposta di @Tim Down di seguito sia migliore, poiché non comporta la modifica dell'HTML esistente, inoltre non utilizza jQuery: stackoverflow.com/a/10965203/134120
AsGoodAsIt Ottiene il

Ottengo un errore con questo sul validatore html di w3:Error: Saw <!-- within a comment. Probable cause: Nested comment (not allowed). At line 5, column 21 if gt IE 8]><!--><html
abumalick il

161

Restituisce la versione di IE o, in caso contrario, IE restituisce false

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

Esempio:

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

o

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

o

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

36
Non funziona per IE11. Da IE 11, hanno cambiato la stringa UA in"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
Si noti che in FF "false <9" è "vero". Quindi, la condizione dovrebbe essereif (isIE () && isIE () < 9) {
nZeus

3
@DeadlyChambers forse funzionava in modalità standard IE7? msdn.microsoft.com/en-us/library/ie/cc196988(v=vs.85).aspx
mason81

4
La risposta approvata è come rilevare la versione di IE in HTML. Questo risponde alla domanda originale.
Matt Wagner,

2
@PrasadGayan - Microsoft Edge non è Internet Explorer. Quindi tornare falso sembra essere la cosa giusta da fare.
Bryan Grezeszak,

120

Se nessun altro ha aggiunto un addEventListermetodo e stai utilizzando la modalità browser corretta, puoi verificare IE 8 o meno con

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

Legacy Internet Explorer e attachEvent (MDN)


7
Questo sembra il modo più efficiente per rilevare IE <= 8 interamente in JavaScript - ed è ottimo per le persone come me che stavano cercando un modo per farlo.
Gregory Magarshak,

Grande! Questo rileva anche IE9 in modalità Quirks, che è quello che stavo cercando.
sstur,

7
Sebbene si tratti di una soluzione "facile da usare", presenta alcuni rischi. Chiunque nella tua azienda (che non è a conoscenza della tua soluzione) può implementare "addEventListener" o "attachEvent" per far fronte alla mancanza di esso in IE 8. E quindi, il tuo codice smetterà di funzionare.
Zé Carlos,

@RoyiNamir Questo test per IE8. Perché mai dovrebbe tornare vero su IE11?
Andreas,

@Andreas oops. non ho visto che OP vuole prima di ie9. l'eliminazione.
Royi Namir,

114

Usa commenti condizionali. Stai cercando di rilevare utenti di IE <9 e i commenti condizionali funzioneranno in quei browser; in altri browser (IE> = 10 e non IE), i commenti verranno trattati come normali commenti HTML, che è quello che sono.

HTML di esempio:

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

Puoi anche farlo puramente con lo script, se hai bisogno di:

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
La versione JavaScript della risposta di @Tim Down ha funzionato perfettamente per me. Ho usato BrowserStack per testarlo con Windows 7 e IE 8, 9, 10 e 11; Mac OS X Snow Leopard con Safari 5.1, Firefox 28.0, Chrome 33.0 e Opera 20.0; iPhone 5 Mobile Safari; e Android Samsung Galaxy Tab 2 10.1 4.0. Come previsto, solo IE8 ha riferito che era IeLessThan9. Bello!
Steve Saporta,

58

Per rilevare facilmente MSIE (v6 - v7 - v8 - v9 - v10 - v11):

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

Utile per rilevare IE10, poiché non supporta i commenti condizionali. Non funziona in IE11, ma IE11 generalmente ha un comportamento corretto
personne3000

11
Finalmente una risposta che non parla dell'utilizzo del rilevamento delle funzionalità e risponde effettivamente alla domanda.
cdmckay,

32

Ecco come AngularJS controlla IE

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

Wow, questo è molto più semplice di tutti i commenti condizionali! Nessun limite di questo?
Andrewb,

secondo i documenti, IE8 + supporta questa proprietà, quindi penso che dovrebbe essere sufficiente per la maggior parte dei casi.
iurii,

Secondo il riferimento MSDN, "Quando il documento corrente non è stato ancora determinato, documentMode restituisce un valore pari a zero (0). Ciò si verifica in genere durante il caricamento di un documento." Questo significa che potresti non avere una risposta valida all'interno di uno script caricato in <head>?
Erik Knowles,

Penso che tu possa risolverlo controllando il valore su window.onload quando il documento è già caricato.
iurii,


19

Rilevamento della versione di IE utilizzando il rilevamento delle funzionalità (IE6 +, i browser precedenti a IE6 vengono rilevati come 6, restituisce null per i browser non IE):

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

Modifica: ho creato un repository bower / npm per la tua comodità: ie-versione

Aggiornare:

una versione più compatta può essere scritta in una riga come:

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

16

Questa funzione restituirà il numero della versione principale di IE come numero intero o undefinedse il browser non è Internet Explorer. Questo, come tutte le soluzioni agente utente, è soggetto allo spoofing agente utente (che è stato una funzionalità ufficiale di IE dalla versione 8).

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

Owen, come si usa in pratica? Come si recupera il valore restituito? Ho provato console.log(!!match && parseInt(match[1])), console.log(parseInt(match[1]))e console.log(match), ma nessun risultato con nessuno di loro.
Frank Conijn,

Ottieni il valore di ritorno chiamando la funzione stessa getIEVersion(). Ad esempio:if (getIEVersion() < 9) {/* IE 8 or below */} if (!getIEVersion()) {/* Not IE */}
Owen,

15

Rileva IE in JS usando i commenti condizionali

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

}());

È praticamente la stessa della mia risposta.
Tim Down,

@TimDown: forse, ma questa risposta è un po 'più completa di funzionalità (ti dice il numero di versione) ed è ben commentata. Inoltre, il link all'inizio di questa risposta porta a un Gist con diversi commenti informativi e interessanti variazioni su questa tecnica.
Alan,

@Alan: punti giusti. Ho adattato il mio alla domanda ma non ho citato la fonte.
Tim Down

12

Questo funziona per me. Lo uso come reindirizzamento a una pagina che spiega perché non ci piace <IE9 e fornisce collegamenti ai browser che preferiamo.

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

1
Oh, è brutto. Uso un metodo più intuitivo, visualizzo un div con l'aspetto di un avviso IE e quando il visitatore fa clic su di esso l'utente passa a browsinghappy.com
Codebeat

10

Il tuo codice può fare il controllo, ma come hai pensato, se qualcuno prova ad accedere alla tua pagina usando IE v1 o> v19 non otterrà l'errore, quindi potrebbe essere più sicuro fare il controllo con l'espressione Regex come questo codice qui sotto:

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
}

Questa non è una buona risposta UA-sniffing non è affidabile. Maggiori informazioni qui: modernizr.com/docs
Jezen Thomas

3
@Jezen A volte UA-sniffing è la strada da percorrere: github.com/Modernizr/Modernizr/issues/538
István Ujj-Mészáros

8

I commenti condizionali non sono più supportati in IE dalla versione 10 come indicato nella pagina di riferimento di Microsoft .

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

quindi utilizzare:

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

}

1
Questa è stata l'unica cosa che ha funzionato su tutta la rete, almeno l'enorme numero di cose che ho provato ... grazie;)
Henrique C.

Questo codice è valido, ma non è in grado di rilevare la modalità di visualizzazione della compatibilità. Sono su IE 11 usando la visualizzazione della compatibilità in IE 8 e questo codice continua a fornire version 11EDIT: questo codice è INCREDIBILE! ahah, dà un oggetto con tutto dentro. La versione è 11 ma docModeIR è uguale a 9. Grazie!
MarceloBarbosa,

5

Per esempio 10 e 11:

Puoi usare js e aggiungere una classe in html per mantenere lo standard dei commenti condizionali :

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

O usa una lib come bowser:

https://github.com/ded/bowser

O modernizr per il rilevamento di funzionalità:

http://modernizr.com/


2
Ho provato alcuni script e soluzioni ma nulla ha funzionato. Quindi ho incluso bowser nel progetto e ha funzionato. Quindi uno per aver suggerito Bowser.
Moulde,

3

Per rilevare Internet Explorer 10 | 11 puoi usare questo piccolo script immediatamente dopo il tag body:

Nel mio caso uso la libreria jQuery caricata in testa.

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

Mi piace grazie, ho solo bisogno di rilevare 10 o 11 poiché non supporto le versioni precedenti
Nearpoint

Anche IE9 è tridente ma non è lo stesso con il supporto CSS. Il rilevamento ritiene che sia almeno 10 ma non è corretto.
Codebeat

3

Questo è stato risposto alla morte, ma questo è tutto ciò che serve.

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

Inoltre, ecco una sandbox che mostra il pattern regex rispetto alle stringhe più comuni di user agent IE: regex101.com/r/lC6oP3/1
Timothy Perez,

@alessadro - Ma dovrebbe, vero? OP voleva testare per <9 ...
nnnnnn il

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

Secondo Microsoft , seguire è la soluzione migliore, è anche molto semplice:

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

In effetti, e in caso qualcuno terre altro qui cercando di utilizzare il sopra, il codice in una risposta in seguito funziona per IE11 ( stackoverflow.com/a/26375930/1129926 ). Ma attenzione, funzionerà con IE12, ecc.? In conclusione, è meglio considerare questi come hack temporanei e probabilmente falliranno in seguito quando verranno rilasciate nuove versioni del browser (non menzionerò nemmeno Edge).
Jeff Mergler,

1

Consiglio di non riscrivere questo codice per l'ennesima volta. Ti consiglierei di utilizzare la libreria Conditionizr ( http://conditionizr.com/ ) che è in grado di testare specifiche versioni di IE, nonché altri browser, sistemi operativi e persino la presenza o l'assenza di display Retina.

Includi il codice solo per i test specifici di cui hai bisogno e otterrai anche il vantaggio di una libreria testata che ha subito molte iterazioni (e che sarebbe facile aggiornare senza rompere il codice).

Si adatta perfettamente anche a Modernizr, che può gestire tutti quei casi in cui è meglio eseguire i test per una funzionalità specifica piuttosto che un browser specifico.


1

Mi piace così:

<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

Questo approccio al rilevamento di IE combina i punti di forza ed evita i punti deboli della risposta di jKey usando i commenti condizionali e la risposta di Owen usando gli user agent.

  • L'approccio di jKey funziona fino alla versione 9 e immune allo spoofing dell'agente utente in IE 8 e 9.
  • L'approccio di Owen può fallire su IE 5 e 6 (rapporto 7) ed è suscettibile allo spoofing UA, ma può rilevare versioni di IE> = 10 (ora includendo anche 12, che postdatano la risposta di Owen).

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

Questo può essere usato per impostare classi utili per il tuo documento contenente la versione di IE:

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

Si noti che rileva la modalità di compatibilità in uso, se IE è in modalità compatibilità. Si noti inoltre che la versione IE è utile soprattutto per le versioni precedenti (<10); le versioni superiori sono più conformi agli standard ed è probabilmente meglio controllare invece le funzionalità usando qualcosa come modernizr.js.


1

Per questo ho creato un conveniente mix di sottolineatura.

_.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

o semplicemente

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

Lo script JS più completo che ho trovato per verificare la presenza di versioni di IE è http://www.pinlady.net/PluginDetect/IE/ . L'intera biblioteca è su http://www.pinlady.net/PluginDetect/Browsers/ .

Con IE10, le istruzioni condizionali non sono più supportate.

Con IE11, l'agente utente non contiene più MSIE. Inoltre, l'utilizzo dell'agente utente non è affidabile perché può essere modificato.

Utilizzando lo script PluginDetect JS, è possibile rilevare IE e rilevare le versioni esatte utilizzando un codice molto specifico e ben progettato che si rivolge a specifiche versioni di IE. Questo è molto utile quando ti interessa esattamente con quale versione di browser stai lavorando.


0

Mi rendo conto di essere un po 'in ritardo per la festa qui, ma avevo verificato un semplice modo in una riga per fornire feedback sul fatto che un browser sia IE e quale versione da 10 in poi fosse. Non ho codificato questo per la versione 11, quindi forse per questo sarà necessario un piccolo emendamento.

Tuttavia, questo è il codice, funziona come un oggetto che ha una proprietà e un metodo e si basa sul rilevamento degli oggetti anziché raschiare l'oggetto del navigatore (che è enormemente difettoso in quanto può essere falsificato).

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

L'utilizzo è isIE.browseruna proprietà che restituisce un valore booleano e si basa su commenti condizionali sul metodo isIE.detectedVersion()che restituisce un numero compreso tra 5 e 10. Sto assumendo che qualcosa di inferiore a 6 e tu sei in un serio territorio della vecchia scuola e farai qualcosa di più robusto di una fodera e qualcosa di più alto di 10 e sei nel territorio più nuovo. Ho letto qualcosa su IE11 che non supporta i commenti condizionali ma non ho studiato a fondo, forse per una data successiva.

Ad ogni modo, così com'è, e per un solo liner, coprirà le basi del browser IE e il rilevamento della versione. È tutt'altro che perfetto, ma è piccolo e facilmente modificabile.

Solo per riferimento, e se qualcuno ha dei dubbi su come implementarlo effettivamente, dovrebbe essere utile la seguente condizione.

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

Rilevare IE e le sue versioni non potrebbe essere più semplice e tutto ciò di cui hai bisogno è un po 'di Javascript nativo / vaniglia:

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

E questo è un modo per usarlo:

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

.

Funziona in tutte le versioni di IE, comprese le versioni successive in Visualizzazione / modalità di compatibilità inferiore ed documentModeè proprietaria di IE.


0

Se è necessario eliminare la versione di IE Browser, è possibile seguire il codice seguente. Questo codice funziona bene per la versione da IE6 a IE11

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

Le finestre eseguite su IE10 verranno aggiornate automaticamente su IE11 + e saranno standardizzate W3C

Al giorno d'oggi, non abbiamo bisogno di supportare 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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.