He mirado mucho a mi alrededor y entiendo que hay muchas formas de detectar Internet Explorer.
Mi problema es el siguiente: tengo un área en mi documento HTML que, cuando se hace clic, llama a una función de JavaScript que es incompatible con Internet Explorer de cualquier tipo. Quiero detectar si se está utilizando IE y, de ser así, establecer la variable en verdadero.
El problema es que estoy escribiendo mi código en Notepad ++, y cuando ejecuto el código HTML en el navegador, ninguno de los métodos para detectar IE funciona. Creo que el problema es que me estoy quedando sin Notepad ++. Necesito poder detectar IE, de modo que, según la variable, pueda deshabilitar esa área del sitio. He probado esto:
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';
}
}
pero no funciona. ¿Cómo puedo detectar IE en Notepad ++? De eso estoy probando el HTML, pero necesito un método que funcione con eso.
editar
Noté que alguien ha marcado esto como un duplicado, y eso es comprensible. Supongo que no lo tuve claro. No puedo usar una respuesta de JQuery, por lo que esto no es un duplicado, ya que estoy pidiendo una respuesta de vainilla JS.
Editar # 2
¿Existe también una forma de detectar el navegador Microsoft Edge?
Respuestas:
No sé por qué, pero no veo "Edge" en el userAgent como todos los demás están hablando, así que tuve que tomar otra ruta que puede ayudar a algunas personas.
En lugar de mirar navigator.userAgent, miré navigator.appName para distinguir si era IE <= 10 o IE11 y Edge. IE11 y Edge usan el appName de "Netscape", mientras que todas las demás iteraciones usan "Microsoft Internet Explorer".
Después de determinar que el navegador es IE11 o Edge, busqué navigator.appVersion. Noté que en IE11 la cadena era bastante larga con mucha información dentro. Elegí arbitrariamente la palabra "Trident", que definitivamente no está en navigator.appVersion para Edge. Probar esta palabra me permitió distinguir los dos.
A continuación se muestra una función que devolverá un valor numérico del Internet Explorer en el que se encuentra el usuario. Si está en Microsoft Edge, devuelve el número 12.
¡Buena suerte y espero que esto ayude!
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; }
fuente
navigator.appName == "Netscape"
evalúan como verdaderos.Aquí está la última forma correcta que conozco de cómo verificar IE y 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'); }
Tenga en cuenta que no necesita la var isIE10 adicional en su código porque ahora realiza comprobaciones muy específicas.
Consulte también esta página para conocer las últimas cadenas de agentes de usuario de IE y Edge porque esta respuesta puede quedar desactualizada en algún momento: https://msdn.microsoft.com/en-us/library/hh869301%28v=vs.85%29. aspx
fuente
navigator.userAgent
reviso mi Win10 / Edge VM, solo obtengo la primera parte, que no incluye la"Edge"
cadena.// detect IE8 and above, and Edge if (document.documentMode || /Edge/.test(navigator.userAgent)) { ... do something }
Explicación:
document.documentMode
Una propiedad exclusiva de IE, disponible por primera vez en IE8.
Una expresión regular para buscar la cadena 'Edge', que luego probamos con la propiedad 'navigator.userAgent'
Actualización de marzo de 2020
@Jam comenta que la última versión de Edge ahora informa
Edg
como el agente de usuario. Entonces el cheque sería:if (document.documentMode || /Edge/.test(navigator.userAgent) || /Edg/.test(navigator.userAgent)) { ... do something }
fuente
/Edge\//.test(navigator.userAgent)
Para ser más robusto, prefiero incluir la barra invertida.document.documentMode || /Edge\//.test(navigator.userAgent) || /Edg\//.test(navigator.userAgent)
Estoy 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;
fuente
El tema es un poco antiguo, pero dado que los scripts aquí detectan Firefox como un falso positivo (EDGE v12), aquí está la versión que uso:
function isIEorEDGE(){ if (navigator.appName == 'Microsoft Internet Explorer'){ return true; // IE } else if(navigator.appName == "Netscape"){ return navigator.userAgent.indexOf('.NET') > -1; // Only Edge uses .NET libraries } return false; }
que por supuesto se puede escribir de una manera más concisa:
function isIEorEDGE(){ return navigator.appName == 'Microsoft Internet Explorer' || (navigator.appName == "Netscape" && navigator.userAgent.indexOf('.NET') > -1); }
fuente
navigator.appVersion
: ahora ya no contiene "Trident" sino que agregan correctamente "Edge" al nombre. ¡Actualizando mi respuesta ahora mismo!Netscape
como appName ...Esta función funcionó perfectamente para mí. También detecta Edge.
Originalmente de este 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; }
Entonces puedes usarlo
if (detectIE()) { /* do IE stuff */ }
en tu código.fuente
Si solo desea darles a los usuarios que usan un navegador MS una advertencia o algo, este código debería ser bueno.
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" }
Gracias a @GavinoGrifoni
fuente
Para mi mejor esto:
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;
Ve a ejecutar: http://output.jsbin.com/solicul/1/ o http://jsfiddle.net/Webnewbie/apa1nvu8/
fuente
Utilice este recorte:
var IE = (navigator.userAgent.indexOf("Edge") > -1 || navigator.userAgent.indexOf("Trident/7.0") > -1) ? true : false;
fuente
navigator.userAgent.indexOf("Edge") > -1 || navigator.userAgent.indexOf("Trident/7.0") > -1
se evalúa como verdadero o falso, por lo que puede devolverlo / usarlo.Código de una línea para detectar el navegador.
Si el navegador es IE o Edge, devolverá verdadero;
let isIE = /edge|msie\s|trident\//i.test(window.navigator.userAgent)
fuente
Aquí hay una clase de JavaScript que detecta IE10, IE11 y Edge.
El objeto Navigator se inyecta con fines de prueba.
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(); };
fuente
Si necesitamos verificar Edge, vaya con esto
if (navigator.userAgent.indexOf ("Edge")> 1) {
//do something
}
fuente
En primer lugar, seguro que no es el problema de Notepad ++. Es su " problema de coincidencia de cadenas "
La cadena común en todas las versiones de IE es MSIE. Consulte las diversas cadenas de userAgent en http://www.useragentstring.com/pages/Internet%20Explorer/
if(navigator.userAgent.indexOf("MSIE") != -1){ alert('I am Internet Explorer!!'); }
fuente