it-swarm-eu.dev

Come posso rilevare Internet Explorer (IE) e Microsoft Edge aspetto JavaScript?

Mi sono guardato molto in giro e capisco che ci sono molti modi per rilevare Internet Explorer.

Il mio problema è questo: ho un'area sul mio documento HTML, che quando cliccato, chiama una funzione JavaScript che è incompatibile con Internet Explorer di qualsiasi tipo. Voglio rilevare se IE è in uso, e in tal caso, impostare la variabile su true.

Il problema è che sto scrivendo il mio codice da Notepad ++ e quando eseguo il codice HTML nel browser, nessuno dei metodi per rilevare IE funziona. Penso che il problema è che sto eseguendo da Notepad ++. Devo essere in grado di rilevare IE, in modo che in base alla variabile, posso disabilitare quell'area del sito. Ho provato questo:

var isIE10 = false;

if (navigator.userAgent.indexOf("MSIE 10") > -1) {
    // this is internet Explorer 10
    isIE10 = true;
   window.alert(isIE10);
}

var isIE = (navigator.userAgent.indexOf("MSIE") != -1);

if(isIE){
    if(!isIE10){
    window.location = 'pages/core/ie.htm';
    }
}

ma non funziona. Come posso rilevare IE da Notepad ++? Questo è quello che sto testando l'HTML, ma ho bisogno di un metodo che funzioni con quello.

modificare

Ho notato che qualcuno lo ha contrassegnato come duplicato e ciò è comprensibile. Suppongo di non essere stato chiaro. Non riesco a utilizzare una risposta JQuery, quindi non è un duplicato come sto chiedendo una risposta Vanilla JS.

Modifica # 2

C'è anche un modo per rilevare il browser Microsoft Edge?

64
user5171952

Non so perché, ma non vedo "Edge" nell'utenteAgent come tutti gli altri stanno parlando, quindi ho dovuto prendere un'altra strada che potrebbe aiutare alcune persone.

Invece di guardare il navigator.userAgent, ho guardato a navigator.appName per distinguere se fosse IE <= 10 o IE11 e Edge. IE11 e Edge utilizzano l'appName di "Netscape", mentre ogni altra iterazione utilizza "Microsoft Internet Explorer".

Dopo aver determinato che il browser è IE11 o Edge, ho quindi cercato su navigator.appVersion. Ho notato che in IE11 la stringa era piuttosto lunga con molte informazioni al suo interno. Ho arbitrariamente scelto la parola "Trident", che non è sicuramente nel navigator.appVersion for Edge. Testare per questa Parola mi ha permesso di distinguere i due.

Di seguito è riportata una funzione che restituirà un valore numerico di cui Internet Explorer è attivo. Se su Microsoft Edge restituisce il numero 12.

Buona fortuna e spero che questo aiuti!

function Check_Version(){
    var rv = -1; // Return value assumes failure.

    if (navigator.appName == 'Microsoft Internet Explorer'){

       var ua = navigator.userAgent,
           re  = new RegExp("MSIE ([0-9]{1,}[\\.0-9]{0,})");

       if (re.exec(ua) !== null){
         rv = parseFloat( RegExp.$1 );
       }
    }
    else if(navigator.appName == "Netscape"){                       
       /// in IE 11 the navigator.appVersion says 'trident'
       /// in Edge the navigator.appVersion does not say trident
       if(navigator.appVersion.indexOf('Trident') === -1) rv = 12;
       else rv = 11;
    }       

    return rv;          
}
27
skribbz14

Ecco l'ultimo modo corretto che conosco su come controllare IE e Edge:

if (/MSIE 10/i.test(navigator.userAgent)) {
   // This is internet Explorer 10
   window.alert('isIE10');
}

if (/MSIE 9/i.test(navigator.userAgent) || /rv:11.0/i.test(navigator.userAgent)) {
    // This is internet Explorer 9 or 11
    window.location = 'pages/core/ie.htm';
}

if (/Edge\/\d./i.test(navigator.userAgent)){
   // This is Microsoft Edge
   window.alert('Microsoft Edge');
}

Si noti che non è necessario il codice var extraIE10 nel codice perché ora esegue controlli molto specifici.

Controlla anche questa pagina per le ultime stringhe IE e Edge user agent, perché questa risposta potrebbe non essere aggiornata a un certo punto: https://msdn.Microsoft.com/en-us /library/hh869301%28v=vs.85%29.aspx

80
Sceptic
// detect IE8 and above, and Edge
if (document.documentMode || /Edge/.test(navigator.userAgent)) {
    ... do something
}

Spiegazione:

document.documentMode

Un IE solo proprietà, prima disponibile in IE8.

/Edge/

Un'espressione regolare per cercare la stringa "Edge", che testeremo quindi contro la proprietà "navigator.userAgent"

20
Chris Halcrow

Sto usando UAParser https://github.com/faisalman/ua-parser-js

var a = new UAParser();
var name = a.getResult().browser.name;
var version = a.getResult().browser.version;
13
Oren Gal

L'argomento è un po 'vecchio, ma poiché gli script qui rilevano Firefox come un falso positivo (Edge v12), ecco la versione che uso:

function isIEorEDGE(){
  if (navigator.appName == 'Microsoft Internet Explorer'){
    return true; // IE
  }
  else if(navigator.appName == "Netscape"){                       
     return navigator.appVersion.indexOf('Edge') > -1; // Edge
  }       

  return false;
}

che, naturalmente, può essere scritto in modo più conciso:

function isIEorEDGE(){
  return navigator.appName == 'Microsoft Internet Explorer' || (navigator.appName == "Netscape" && navigator.appVersion.indexOf('Edge') > -1);
}
11
GavinoGrifoni

Questa funzione ha funzionato perfettamente per me. Rileva anche Edge.

Originariamente da questo Codepen:

https://codepen.io/gapcode/pen/vEJNZN

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

Quindi puoi usare if (detectIE()) { /* do IE stuff */ } nel tuo codice.

6
phocks

Se vuoi solo dare agli utenti che usano un browser MS un avvertimento o qualcosa del genere, questo codice dovrebbe essere buono.

HTML:

<p id="IE">You are not using a Microsoft browser</p>

Javascript:

using_ms_browser = navigator.appName == 'Microsoft Internet Explorer' || (navigator.appName == "Netscape" && navigator.appVersion.indexOf('Edge') > -1) || (navigator.appName == "Netscape" && navigator.appVersion.indexOf('Trident') > -1);

if (using_ms_browser == true){
    document.getElementById('IE').innerHTML = "You are using a MS browser"
}

Grazie a @GavinoGrifoni

5
patchie

Per me meglio questo:

var uA = window.navigator.userAgent,
    onlyIEorEdge = /msie\s|trident\/|Edge\//i.test(uA) && !!( document.uniqueID || window.MSInputMethodContext),
    checkVersion = (onlyIEorEdge && +(/(Edge\/|rv:|msie\s)([\d.]+)/i.exec(uA)[2])) || NaN;

Esegui: http://output.jsbin.com/solicul/1/ o http: // jsfiddle .net/Webnewbie/apa1nvu8/

2
James Peter

Usa questo snip: var IE = (navigator.userAgent.indexOf("Edge") > -1 || navigator.userAgent.indexOf("Trident/7.0") > -1) ? true : false;

2

Ecco una classe javascript che rileva IE10, IE11 e Edge.
L'oggetto Navigator viene iniettato a scopo di test.

var DeviceHelper = function (_navigator) {
    this.navigator = _navigator || navigator;
};
DeviceHelper.prototype.isIE = function() {
    if(!this.navigator.userAgent) {
        return false;
    }

    var IE10 = Boolean(this.navigator.userAgent.match(/(MSIE)/i)),
        IE11 = Boolean(this.navigator.userAgent.match(/(Trident)/i));
    return IE10 || IE11;
};

DeviceHelper.prototype.isEdge = function() {
    return !!this.navigator.userAgent && this.navigator.userAgent.indexOf("Edge") > -1;
};

DeviceHelper.prototype.isMicrosoftBrowser = function() {
    return this.isEdge() || this.isIE();
};
0
Tomas Prado