Rilevamento di Internet Explorer 11


125

So che IE 11 ha una stringa dell'agente utente diversa da tutti gli altri IE

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

Ho provato a rilevare IE 11 con la risposta specificata per questa domanda '

Jquery non riesce a rilevare IE 11

Quello è !!navigator.userAgent.match(/Trident\/7\./)

Ma sto ricevendo un errore Object not found and needs to be re-evaluated.

Quindi ho aperto la console per sviluppatori in IE11 e ho provato ad accedere ad alcuni oggetti javascript predefiniti, ricevo ancora lo stesso errore.

Ho provato

navigator.userAgent

window.navigator

console.log('test');

Qualcuno ne ha idea?


@ Bobkhin ho menzionato sopra il mio problema. errore di Object not found and needs to be re-evaluated.
ricezione


possibile duplicato di Come rilevare IE11?
Paul Sweatte

Risposte:


188

Modifica 18 novembre 2016

Anche questo codice funziona ( per chi preferisce un'altra soluzione, senza usare ActiveX )

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

Risposta originale

Per controllare Ie11, puoi usare questo: (testato)

(o esegui questo )

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

Ho tutti i VMS di IE:

inserisci qui la descrizione dell'immagine

inserisci qui la descrizione dell'immagine

inserisci qui la descrizione dell'immagine

inserisci qui la descrizione dell'immagine

Avviso: questo non funzionerà per IE11:

come puoi vedere qui, restituisce vero:

inserisci qui la descrizione dell'immagine

Quindi cosa possiamo fare :

Apparentemente, hanno aggiunto lo spazio bit della macchina:

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"

quindi possiamo fare:

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

questo restituirà vero solo per ie11.


1
@Jan. sì. solo IE11 restituirebbe vero per l'intera condizione. Ho appena mostrato che <11 restituisce false.
Royi Namir

1
@IanSteffy Questo è solo per mostrare il risultato (!) Dell'operazione. È possibile aprire un file HTML e aggiungere un tag di script ed eseguire il comando all'interno di quello script. Qui esegui questo .
Royi Namir

2
x64restituisce sia Chrome che Edge
Gene R

3
Aspetta, c'è un IE12? Pensavo che IE11 fosse l'ultimo e che presto non dovremo più preoccuparci di quello stupido browser! ☹
Michael Scheper

1
Does non lavorare per la mia IE 11.0.9600.19431 su Windows 7 Enterprise. Non c'è window.MSInputMethodContext.
Heinrich Ulbricht

105

Per rilevare MSIE (dalla versione 6 alla 11) rapidamente:

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

2
Non dovrebbe la seconda indexOf()essere > -1?
riformato il

Sì, non so perché è> 0 e non> -1, ma "Trident /" compare comunque molto più in là nella stringa appVersion-
chrismarx

22

Uso la seguente funzione per rilevare le versioni 9, 10 e 11 di 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

Tutte le risposte precedenti ignorano il fatto che hai menzionato che non hai finestre o navigatori :-)

Quindi apro la console per sviluppatori in IE11

e questo è dove dice

Oggetto non trovato e deve essere rivalutato.

e navigatore, finestra, console, nessuno di essi esiste e necessita di essere rivalutato. L'ho avuto in emulazione. basta chiudere e aprire la console alcune volte.


5
bontà gentile GRAZIE per aver effettivamente letto la domanda e aver risposto al problema con una nuova valutazione.
marknadal

8
Ha funzionato anche per me. Questo è il motivo per cui ci saranno feste in tutto il mondo quando IE morirà.
voltrevo

Chiudere e aprire la console ha funzionato per me. Strano comportamento rispetto a Firefox o Chrome (ma è IE, quindi le cifre.)
Ectropy

7

Un modo abbastanza sicuro e conciso per rilevare solo IE 11 è

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

o qualcosa del genere
var IE11= !!window.msCrypto;


msCryptoè una versione window.cryptodell'oggetto con prefisso e implementata solo in IE 11.
https://developer.mozilla.org/en-US/docs/Web/API/Window/crypto


L'unica soluzione funzionante (quella più corta, pulita ed elegante)! Royi Namir si /x64|x32/ig.test(window.navigator.userAgent)applica anche a Firefox!
Sándor Zuboly

4

E come l'ho implementato

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

1
Penso che tu abbia un errore di battitura nella tua funzione. Per prima cosa, fai il controllo delle condizioni, che non viene utilizzato. Secondo, forse intendi && "ActiveXObject" in window. Terzo: qual è il trucco con la doppia negazione !!?
dma_k

1
!! significa più o meno "Coerce to boolean".
Andrew Gray,

4

Ok, prova questo, semplice e per IE11 e IE sotto la versione 11

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

navigator.userAgent.toUpperCase().indexOf("TRIDENT/") != -1per la versione IE 11 navigator.userAgent.toUpperCase().indexOf("MSIE") != -1per IE sotto la versione 11

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

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


2

Questo collegamento è stato utile . Contiene il codice javascript per rilevare tutte le versioni di IE fino a IE11. Ho testato lo script con l'emulatore IE11. Per trovare l'emulatore IE11, fare clic con il pulsante destro del mouse sul browser Web fare clic su "Ispeziona elemento". Nella parte inferiore sinistra della pagina, scorri verso il basso la barra di navigazione e fai clic sull'icona sul desktop. La casella a discesa "Stringa agente utente" contiene le opzioni per emulare IE6-11.

Funziona. L'ho usato solo alcuni minuti prima di scrivere questa risposta. Impossibile pubblicare istantanee: reputazione insufficiente.


Questo è il codice: segui il link per visualizzarlo di nuovo:

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

L'uso di questa RegExp sembra funzionare per IE 10 e IE 11:

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

Non ho un IE più vecchio di IE 10 per testarlo.


0

Usa Navigatore: -

Il navigatorè un oggetto che contiene tutte le informazioni sul browser del computer client.

navigator.appName restituisce il nome del browser della macchina client.

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 su IE 11. Hanno fatto di tutto per ingannare gli sviluppatori.
kagronick

0

Ho scoperto che IE11 fornisce più di una stringa di agente utente in ambienti diversi.

Invece di fare affidamento su MSIEe altri approcci, è meglio fare affidamento sulla Tridentversione

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

Spero che questo ti aiuti :)

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.