internet - if explorer javascript
¿Cuál es la mejor manera de detectar Internet Explorer 6 utilizando JavaScript? (9)
¿Cuál es la mejor manera de detectar <browser_x> utilizando JavaScript?
Por no
Como lo mencionó Andrew Moore en los comentarios de esta publicación, debería usar la detección de características. Esto hará que su código sea más "a prueba de futuro". Si otro navegador incluye, o ya no es compatible con una función en el futuro, su código estará seguro. Hay una serie de sitios que explican cómo manejar esto. El concepto es enorme y abarca muchos conceptos, así que en lugar de escribir un ensayo / libro sobre esto, aquí hay algunos recursos para usar:
- Detección de objetos (empieza aquí)
- Detección de características (o comience aquí)
- Detección del navegador frente a la detección de objetos
- jQuery.support : una jQuery.support manera de verificar las funciones si ya tiene jQuery incluido en una página.
¿Cuál es la mejor manera de detectar Internet Explorer 6 utilizando JavaScript?
If browser == IE6 {
alert(''hi'');
}
A riesgo de responder realmente a la pregunta que se hizo (y suponiendo por un momento que el autor de la pregunta tiene una buena razón para detectar específicamente IE6):
if (//bMSIE 6/.test(navigator.userAgent) && !window.opera) {
// yep, browser claims to be IE6
}
Adición muy tardía.
Además de los comentarios condicionales HTML usados en la respuesta de apphacker , la implementación JScript de Microsoft también proporciona comentarios condicionales para JavaScript :
<script type="text/javascript">
var isIE6 = /*@cc_on/*@if(@_jscript_version<=5.6)1@else@*/0/*@end@*/;
if (isIE6) {
alert("You''re screwed");
}
</script>
Lo bueno es que también se puede utilizar en archivos JavaScript externos ( .js
).
Para obtener una tabla con la versión de JScript implementada por las aplicaciones de host de Microsoft: Información de versión de JavaScript
La forma más confiable de hacer esto es usar comentarios condicionales, como lo menciona @apphacker. Sin embargo, algo que parece menos conocido es que los comentarios condicionales se pueden usar en JavaScript:
var div = document.createElement("div");
div.innerHTML = "<!--[if IE 6]><i></i><![endif]-->";
var isIe6 = (div.getElementsByTagName("i").length == 1);
alert("Is IE 6: " + isIe6);
Los comentarios condicionales son una buena alternativa:
<!--[if IE 6]>
<script>
var everythingIsBroken = true;
</script>
<![endif]-->
Edit : si aún está buscando apoyar a IE 6 en 2017 o después ... bueno, mi corazón está con usted. La respuesta a esta pregunta en 2017 es realmente no preocuparse por IE 6. Ya no es un navegador compatible. Cualquier sistema operativo que pueda ejecutar este navegador y el navegador en sí ya no recibirá actualizaciones de seguridad. Esto significa que los usuarios que utilizan este software corren un gran riesgo de ser explotados. Este es un gran problema para las personas que no pueden costear la actualización.
No bases tu detección en el usuario-agente. Hay muchos otros navegadores que utilizan el motor Trident 4 (el que utiliza IE6) que no son IE6.
La respuesta es simple: no detecte el navegador , detecte el motor . Para hacer eso, debes usar lo que se llama detección basada en características .
Usar la detección basada en características tiene las siguientes ventajas:
- Detecta todos los navegadores usando un motor de renderizado similar al objetivo.
- Bifurcación de código más fácil para solucionar problemas de un motor de renderizado.
- Menos falsos positivos (los UA pueden modificarse para que pasen como otro navegador, las características no pueden).
La siguiente secuencia de comandos utiliza las características del navegador para detectar el motor. Crédito al equipo de producción de The MooTools ( http://mootools.net/developers/ ).
Nota: el fragmento de código siguiente se ha modificado para que funcione sin el marco javascript de MooTools . Si desea trabajar con MooTools , ya no necesita este código, es parte de la distribución.
function $tryCatch(){
for (var i = 0, l = arguments.length; i < l; i++){
try {
return arguments[i]();
} catch(e){}
}
return null;
};
var Browser = {
Engine: {name: ''unknown'', version: 0},
Platform: {name: (window.orientation != undefined) ? ''ipod'' : (navigator.platform.match(/mac|win|linux/i) || [''other''])[0].toLowerCase()},
Features: {xpath: !!(document.evaluate), air: !!(window.runtime), query: !!(document.querySelector)},
Plugins: {},
Engines: {
presto: function(){
return (!window.opera) ? false : ((arguments.callee.caller) ? 960 : ((document.getElementsByClassName) ? 950 : 925));
},
trident: function(){
return (!window.ActiveXObject) ? false : ((window.XMLHttpRequest) ? ((document.querySelectorAll) ? 6 : 5) : 4);
},
webkit: function(){
return (navigator.taintEnabled) ? false : ((Browser.Features.xpath) ? ((Browser.Features.query) ? 525 : 420) : 419);
},
gecko: function(){
return (!document.getBoxObjectFor && window.mozInnerScreenX == null) ? false : ((document.getElementsByClassName) ? 19 : 18);
}
}
};
Browser.Platform[Browser.Platform.name] = true;
Browser.detect = function(){
for (var engine in this.Engines){
var version = this.Engines[engine]();
if (version){
this.Engine = {name: engine, version: version};
this.Engine[engine] = this.Engine[engine + version] = true;
break;
}
}
return {name: engine, version: version};
};
Browser.detect();
Browser.Request = function(){
return $tryCatch(function(){
return new XMLHttpRequest();
}, function(){
return new ActiveXObject(''MSXML2.XMLHTTP'');
}, function(){
return new ActiveXObject(''Microsoft.XMLHTTP'');
});
};
Browser.Features.xhr = !!(Browser.Request());
Browser.Plugins.Flash = (function(){
var version = ($tryCatch(function(){
return navigator.plugins[''Shockwave Flash''].description;
}, function(){
return new ActiveXObject(''ShockwaveFlash.ShockwaveFlash'').GetVariable(''$version'');
}) || ''0 r0'').match(//d+/g);
return {version: parseInt(version[0] || 0 + ''.'' + version[1], 10) || 0, build: parseInt(version[2], 10) || 0};
})();
function $exec(text){
if (!text) return text;
if (window.execScript){
window.execScript(text);
} else {
var script = document.createElement(''script'');
script.setAttribute(''type'', ''text/javascript'');
script[(Browser.Engine.webkit && Browser.Engine.version < 420) ? ''innerText'' : ''text''] = text;
document.head.appendChild(script);
document.head.removeChild(script);
}
return text;
};
Simplemente incluya esta clase de JavaScript y podrá detectar IE6 y cualquier otro navegador que use el motor Trident4 haciendo lo siguiente:
if(Browser.Engine.trident4) {
alert(''IE6 or similar...'');
} elseif(Browser.Engine.name == "trident") {
alert(''Internet Explorer Trident Rendering Engine Version '' + Browser.Engine.version);
}
No estoy seguro de si hay una razón especial por la que desee detectar IE 6, pero en general es mejor intentar detectar las características del navegador en lugar de detectar el navegador. Puede hacerlo fácilmente con JQuery usando jQuery.support: jQuery.support .
<!--[if (IE 6)|(IE 7)]>
<script>
alert("Lesser browser detected!");
</script>
<![endif]-->
var ua = window.navigator.userAgent;
var msie = ua.indexOf ( "MSIE " );
if ( msie > 0 ) // If Internet Explorer, return version number
return parseInt (ua.substring (msie+5, ua.indexOf (".", msie )));
else // If another browser, return 0
return 0;