2008-11-11 10 views

Respuesta

18

De detecting Internet Explorer More Effectively en MSDN:

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 >= 6.0) 
     msg = "You're using a recent copy of Internet Explorer." 
    else 
     msg = "You should upgrade your copy of Internet Explorer."; 
    } 
    alert(msg); 
} 
+4

no funciona en IE11 – JT703

4

Si ya está utilizando jQuery en una versión pre-1.9 y que no es necesario para detectar IE 11, se puede hacer esto:

if (jQuery.browser.msie == true) { 
if (jQuery.browser.version == 7.0) 
    // .. do something for 7.0 
else 
    // .. do something for < 7.0 
} 
+3

jQuery es genial, pero recomendarlo simplemente para hacer una comprobación del navegador es excesivo. Por otro lado, tal vez necesita una buena razón para meter el pie en la puerta. – TravisO

+0

automático -1 voto para SO JavaScript Question Disease, arrastrando en cientos de líneas de framework para hacer un trivial one-liner. – bobince

+2

Muchos de nosotros ya estamos usando jQuery por otras razones, por lo que es útil tener respuestas marco a estas preguntas. Como puede ver, es mucho más conciso que la solución de javascript puro. –

3

el navegador de objetos contiene toda la información sobre el navegador del usuario :

por ejemplo:

navegador var = navigator.appName;

var b_version = navigator.appVersion;

var version = parseFloat (b_version);

Ver:

http://www.w3schools.com/js/js_browser.asp

+1

Es útil saberlo, pero en este caso, navigator.appVersion devuelve "4" en IE6 e IE7, así que no puedo usar eso para distinguir entre los dos. Gracias sin embargo. –

+0

Realmente ya no es cierto. HTML5 dice, por ejemplo, que navigator.appName 'debe devolver la cadena "Netscape" o el nombre completo del navegador, p. "Mellblom Browsernator" '- y esa appVersion debe devolver la cadena "4.0" o una cadena que representa la versión del navegador en detalle, p. "1.0 (VMS; en-US) Mellblomenator/9000" - por lo que este código devolverá la versión = 4.0 o 1.0 para cualquier navegador compatible con HTML5. – Spike0xff

3

Si usted está mirando para una determinada funcionalidad, deberá verificar que no directamente, por ejemplo, if (window.focus) {window.focus();}La detección del navegador nunca es lo suficientemente confiable.

Para obtener más información sobre la detección de objeto frente a navegador, check out this article at Quirksmode.

Por otro lado, si la característica que necesita ES el tipo y la versión del navegador, p. con fines estadísticos, vaya con navigator.appName y navigator.appVersion. (Sin embargo, muchos navegadores menos populares se disfrazan como MSIE 6 o 7, ya que ciertos sitios bloquean todo lo que no es IE con la premisa de que "todos los navegadores modernos son IE, ¿no?") (Sugerencia: ya no).

+1

Ese es un buen punto. Aunque en este caso la presencia del objeto no me dice si esto es IE 6 o 7. Necesito saber cómo solucionar un error en IE6. –

12

Si realmente quieres estar seguro de que estás usando IE y una versión específica, obviamente podrías usar las etiquetas condicionales de IE para ejecutar solo cierto código dentro de IE. No es tan bonito, pero al menos puedes estar seguro de que realmente es IE y no una versión falsa.

<script> 
    var isIE = false; 
    var version = -1; 
</script> 
<!--[if IE 6]> 
    <script> 
     isIE = true; 
     version = 6 
    </script> 
<![endif]--> 
<!--[if IE 7]> 
    <script> 
     isIE = true; 
     version = 7 
    </script> 
<![endif]--> 

Es bastante auto explicativo. En IE6 isIE es true y version es 6, en IE7 isIE es true y version es 7 lo contrario isIE es falso y es version-1

Alternativamente usted podría rodar su propia solución utilizando el código plagarised de jQuery.

var userAgent = navigator.userAgent.toLowerCase(); 
var version = (userAgent.match(/.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/) || [])[1], 
var isIE = /msie/.test(userAgent) && !/opera/.test(userAgent),  
+0

Lo sentimos, perdimos la parte de tu publicación donde dices que los comentarios condicionales no son apropiados –

+0

Niza +1 Me gusta! – niko

0

Este es el script que uso y parece que funciona bastante bien:

// Returns 0 if the browser is anything but IE 
function getIEVersion() { 
    var ua = window.navigator.userAgent; 
    var ie = ua.indexOf("MSIE "); 
    return ((ie > 0) ? parseInt(ua.substring(ie+5, ua.indexOf(".", ie))) : 0); 
} 

la esperanza de que ayude a alguien ...

2

Esto probablemente sea rechazado, porque no está respondiendo directamente la pregunta, pero ... Debe no escribir código específico del navegador. Es muy poco lo que no puede hacer al codificar los navegadores más aceptados.

EDITAR: La única vez que me pareció útil tener comentarios condicionales fue cuando necesitaba incluir ie6.css o ie7.css.

0

Esto debería dar más detalles de lo que usted desee:

var agent = navigator.userAgent; 
var msiePattern = /.*MSIE ((\d+).\d+).*/ 
if(msiePattern.test(agent)) { 
    var majorVersion = agent.replace(msiePattern,"$2"); 
    var fullVersion = agent.replace(msiePattern,"$1"); 
    var majorVersionInt = parseInt(majorVersion); 
    var fullVersionFloat = parseFloat(fullVersion); 
} 
0

Como nadie parece que han dicho todavía:

La prueba es necesaria dentro de una función de JavaScript por lo que un comentario condicional no parece adecuado.

Usted puede poner fácilmente un comentario condicional - un comentario condicional JScript, no un HTML uno - dentro de una función:

function something() { 
    var IE_WIN= false; 
    var IE_WIN_7PLUS= false; 
    /*@cc_on 
    @if (@_win32) 
     IE_WIN= true; 
     @if (@_jscript_version>=5.7) 
      IE_WIN_7PLUS = true; 
     @end 
    @end @*/ 
    ... 
} 

Es más típico para hacer la prueba una vez a nivel mundial, sin embargo, y justo verifique las banderas almacenadas a partir de entonces.

Los CC son más confiables que el cribado en el que se ha convertido la cadena de User-Agent en estos días. Los métodos de coincidencia de cadenas en navigator.userAgent pueden identificar erróneamente navegadores de suplantación de identidad como Opera.

Por supuesto, sniffing de capacidades es mucho mejor para código entre navegadores donde es posible, pero en algunos casos, generalmente necesita identificar específicamente IE, y los CC son probablemente la mejor manera de hacerlo hoy en día.

3

Así que el modo de vista de compatibilidad con IE8 se informa a sí mismo como IE7, aunque no siempre se comporta del mismo modo. Y para eso, te doy este monstruo:

// IE8's "Compatibility mode" is anything but. Oh well, at least it doesn't take 40 lines of code to detect and work around it. 
// Oh wait: 
/* 
* Author: Rob Reid 
* CreateDate: 20-Mar-09 
* Description: Little helper function to return details about IE 8 and its various compatibility settings either use as it is 
* or incorporate into a browser object. Remember browser sniffing is not the best way to detect user-settings as spoofing is 
* very common so use with caution. 
*/ 
function IEVersion(){ 
    var _n=navigator,_w=window,_d=document; 
    var version="NA"; 
    var na=_n.userAgent; 
    var ieDocMode="NA"; 
    var ie8BrowserMode="NA"; 
    // Look for msie and make sure its not opera in disguise 
    if(/msie/i.test(na) && (!_w.opera)){ 
     // also check for spoofers by checking known IE objects 
     if(_w.attachEvent && _w.ActiveXObject){   
      // Get version displayed in UA although if its IE 8 running in 7 or compat mode it will appear as 7 
      version = (na.match(/.+ie\s([\d.]+)/i) || [])[1]; 
      // Its IE 8 pretending to be IE 7 or in compat mode   
      if(parseInt(version)==7){     
       // documentMode is only supported in IE 8 so we know if its here its really IE 8 
       if(_d.documentMode){ 
        version = 8; //reset? change if you need to 
        // IE in Compat mode will mention Trident in the useragent 
        if(/trident\/\d/i.test(na)){ 
         ie8BrowserMode = "Compat Mode"; 
        // if it doesn't then its running in IE 7 mode 
        }else{ 
         ie8BrowserMode = "IE 7 Mode"; 
        } 
       } 
      }else if(parseInt(version)==8){ 
       // IE 8 will always have documentMode available 
       if(_d.documentMode){ ie8BrowserMode = "IE 8 Mode";} 
      } 
      // If we are in IE 8 (any mode) or previous versions of IE we check for the documentMode or compatMode for pre 8 versions    
      ieDocMode = (_d.documentMode) ? _d.documentMode : (_d.compatMode && _d.compatMode=="CSS1Compat") ? 7 : 5;//default to quirks mode IE5        
     } 
    } 

    return { 
     "UserAgent" : na, 
     "Version" : version, 
     "BrowserMode" : ie8BrowserMode, 
     "DocMode": ieDocMode 
    }    
} 
var ieVersion = IEVersion(); 
var IsIE8 = ieVersion.Version != "NA" && ieVersion.Version >= 8; 
+0

Esto es bueno para sitios que tienen etiquetas como esta: '' – jfroom

1

Bueno ... esto es lo que surgió después de pensar por un tiempo. solo quería encontrar una solución simple.

if (navigator.appName == 'Microsoft Internet Explorer') { 
     // Take navigator appversion to an array & split it 
     var appVersion = navigator.appVersion.split(';'); 
     // Get the part that you want from the above array 
     var verNumber = appVersion[1]; 

     alert(verNumber); 
} 

Devuelve ejemplo: - MSIE 10.0, MSIE 9.0, MSIE 8,0

ampliar aún más, si se desea comprobar si es "menor que" o "mayor que" la versión de IE, se puede modificar ligeramente

if (navigator.appName == 'Microsoft Internet Explorer') { 
     var appVersion = navigator.appVersion.split(';'); 
     var verNumber = appVersion[1]; 
     // Reaplce "MSIE " from the srting and parse it to integer value   
     var IEversion = parseInt(verNumber.replace('MSIE ', '')); 

     if(IEversion <= 9){ 
      alert(verNumber); 
     } 
} 

tuvo la idea de base de w3schools, espero que esto ayude a alguien ...: D

0
<script> 
    alert("It is " + isIE()); 

    //return ie number as int else return false 
    function isIE() { 
     var myNav = navigator.userAgent.toLowerCase(); 
     if (myNav.indexOf('msie') != -1) //ie less than ie11 (6-10) 
     { 
      return parseInt(myNav.split('msie')[1]); 
     } 
     else 
     { 
      //Is the version more than ie11? Then return false else return ie int number 
      return (!!(myNav.match(/trident/) && !myNav.match(/msie/)) == false)?false : parseInt(myNav.split('rv:')[1].substring(0, 2));    
     } 
    } 
</script> 
Cuestiones relacionadas