Compruebe si el usuario está utilizando IE
Estoy llamando a una función como la siguiente haciendo clic en divs con una clase determinada.
¿Hay alguna manera de verificar al iniciar la función si un usuario está usando Internet Explorer y cancelarla o cancelarla si está usando otros navegadores para que solo se ejecute para usuarios de IE? Todos los usuarios aquí estarían en IE8 o versiones superiores, por lo que no necesitaría cubrir IE7 y versiones inferiores.
Si pudiera saber qué navegador están usando, sería fantástico, pero no es obligatorio.
Función de ejemplo:
$('.myClass').on('click', function(event)
{
// my function
});
Han pasado varios años y el navegador Edge ahora usa Chromium como motor de renderizado.
Lamentablemente, comprobar IE 11 sigue existiendo.
Aquí hay un enfoque más sencillo, ya que las versiones antiguas de IE deberían desaparecer.
if (window.document.documentMode) {
// Do IE stuff
}
Aquí está mi antigua respuesta (2014):
En Edge, la cadena del agente de usuario ha cambiado.
/**
* detect IEEdge
* returns version of IE/Edge or false, if browser is not a Microsoft browser
*/
function detectIEEdge() {
var ua = window.navigator.userAgent;
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 => return version number
return parseInt(ua.substring(edge + 5, ua.indexOf('.', edge)), 10);
}
// other browser
return false;
}
Uso de muestra:
alert('IEEdge ' + detectIEEdge());
Cadena predeterminada de IE 10:
Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0)
Cadena predeterminada de IE 11:
Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko
Cadena predeterminada de Edge 12:
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
Cadena predeterminada de Edge 13 (gracias @DrCord):
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
Cadena predeterminada de Edge 14:
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2486.0 Safari/537.36 Edge/14.14300
Cadena predeterminada de Edge 15:
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36 Edge/15.15063
Cadena predeterminada de Edge 16:
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 Edge/16.16299
Cadena predeterminada de Edge 17:
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36 Edge/17.17134
Cadena predeterminada de Edge 18 (vista previa interna):
Mozilla/5.0 (Windows NT 10.0; Win64; x64; ServiceUI 14) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36 Edge/18.17730
Prueba en CodePen:
http://codepen.io/gapcode/pen/vEJNZN
Utilice el siguiente método de JavaScript:
function msieversion()
{
var ua = window.navigator.userAgent;
var msie = ua.indexOf("MSIE ");
if (msie > 0) // If Internet Explorer, return version number
{
alert(parseInt(ua.substring(msie + 5, ua.indexOf(".", msie))));
}
else // If another browser, return 0
{
alert('otherbrowser');
}
return false;
}
Puede encontrar los detalles en el siguiente sitio de soporte de Microsoft:
Cómo determinar la versión del navegador a partir del script
Actualización: (soporte IE 11)
function msieversion() {
var ua = window.navigator.userAgent;
var msie = ua.indexOf("MSIE ");
if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./)) // If Internet Explorer, return version number
{
alert(parseInt(ua.substring(msie + 5, ua.indexOf(".", msie))));
}
else // If another browser, return 0
{
alert('otherbrowser');
}
return false;
}
Si lo único que quieres saber es si el navegador es IE o no, puedes hacer esto:
var isIE = false;
var ua = window.navigator.userAgent;
var old_ie = ua.indexOf('MSIE ');
var new_ie = ua.indexOf('Trident/');
if ((old_ie > -1) || (new_ie > -1)) {
isIE = true;
}
if ( isIE ) {
//IE specific code goes here
}
Actualización 1: un método mejor
Recomiendo esto ahora. Sigue siendo muy legible y tiene mucho menos código :)
var ua = window.navigator.userAgent;
var isIE = /MSIE|Trident/.test(ua);
if ( isIE ) {
//IE specific code goes here
}
Gracias a JohnnyFun en los comentarios por la respuesta abreviada :)
Actualización 2: Pruebas de IE en CSS
En primer lugar, si puede, debe utilizar @supports
declaraciones en lugar de JS para comprobar si un navegador admite una determinada función CSS.
.element {
/* styles for all browsers */
}
@supports (display: grid) {
.element {
/* styles for browsers that support display: grid */
}
}
(Tenga en cuenta que IE no admite @supports
ningún tipo de soporte e ignorará cualquier estilo colocado dentro de una @supports
declaración).
Si el problema no se puede resolver, @supports
puede hacer esto:
// JS
var ua = window.navigator.userAgent;
var isIE = /MSIE|Trident/.test(ua);
if ( isIE ) {
document.documentElement.classList.add('ie')
}
/* CSS */
.element {
/* styles that apply everywhere */
}
.ie .element {
/* styles that only apply in IE */
}
(Nota: classList
es relativamente nuevo para JS y creo que, fuera de los navegadores IE, solo funciona en IE11. Posiblemente también en IE10).
Si está utilizando SCSS (Sass) en su proyecto, esto se puede simplificar a:
/* SCSS (Sass) */
.element {
/* styles that apply everywhere */
.ie & {
/* styles that only apply in IE */
}
}
Actualización 3: Agregar Microsoft Edge (no recomendado)
Si también desea agregar Microsoft Edge a la lista, puede hacer lo siguiente. Sin embargo , no lo recomiendo porque Edge es un navegador mucho más competente que IE.
var ua = window.navigator.userAgent;
var isIE = /MSIE|Trident|Edge\//.test(ua);
if ( isIE ) {
//IE & Edge specific code goes here
}