En principio, detectar el navegador que utiliza un visitante es sencillo si se usa JavaScript; por lo general, cualquier ejemplo que vemos en la web se limita a determinar si se una Internet Explorer o no y para eso, basta que verifiquemos un dato llamado navigator.appName por ejemplo, algo así:
<script>
var NAV = navigator.appName;
if (NAV=="Microsoft Internet Explorer") {
... está usando Internet Explorer y hacemos algo ...
} else {
... está usando cualquier otro navegador ...
}
</script>
navigator.appName:
¿Que hacer con eso? Dependerá de cada uno. Como esta entrada tiene como fin tratar de responder la pregunta de
Lagarto y su intención es detectar el navegador de nuestros lectores y si usan IE sugerirles que usen otros; ese tipo de script sería suficiente
¿Cómo mostrarlo? hay muchas formas y lo más sencillo, sería colocarlo en un elemento HTML; por ejemplo:
<script>
if (navigator.appName=="Microsoft Internet Explorer") {
document.write("Estás usando Internet Explorer blabla blabla un texto cualquiera")
}
</script>
Pero, ese no es el único dato accesible, el objeto navigator tiene muchas más propiedades y eso que, en algún tiempo fue suficiente, hoy ya no lo es así que si queremos detectar el navegador correctamente, hay otros datos que deberíamos leer; por ejemplo:
navigator.appCodeName nos devuelve el nombre real:
navigator.appCodeName:
navigator.appVersion la versión:
navigator.appVersion:
y sobre todo, navigator.userAgent que nos devuelve un texto bastante largo con la información completa:
navigator.userAgent:
Es esta última la que permite el control más riguroso pero es muy larga así que simplemente, vamos a verificar si dentro de ella hay algún texto específico; podemos buscar:
MSIE para detectar Internet Explroer
Firefox para detectar Firefox
Chrome para detectar Google Chrome
Opera para detectar Opera
y así seguimos, incluso, podemos detectar móviles como iPhone o Android.
La estructura elemental podría ser algo así:
<script>
var navegador = navigator.userAgent;
if (navigator.userAgent.indexOf('MSIE') !=-1) {
document.write('está usando Internet Explorer ...');
} else if (navigator.userAgent.indexOf('Firefox') !=-1) {
document.write('está usando Firefox ...');
} else if (navigator.userAgent.indexOf('Chrome') !=-1) {
document.write('está usando Google Chrome ...');
} else if (navigator.userAgent.indexOf('Opera') !=-1) {
document.write('está usando Opera ...');
} else {
document.write('está usando un navegador no identificado ...');
}
</script>
Llegado el caso, si lo que nos interesa es detectar sólo un navegador como Internet Explorer, también podemos hacerlo con CSS tal como se muestra en
una vieja entrada aunque ese método no funcionará en Opera.
25 comentarios:
Esto es lo que esperava ahora a leerlo, gracias por tomar en cuenta las preguntas.
y como podriamos implementar esto en un tipo de ventana modal que se active al detectar sierto navegador y sugerir el cambio a mozilla, chrome u otro navegador, y disculpa por tanta pregunta pero bueno eres de los bloggers mas confiables que conosco y vien dicen que hagas fama y te eches a dormir jajaja
¿Se puede poner un enlace adentro del script ese?
Hablo del que detecta que navegan con Explorer, me gustaría ponerlo pero con enlaces de descarga de Opera y Firefox.
Che, segunda pregunta, que se me olvidó en un segundo: ¿se puede detectar el navegador en los comentarios, como tiene Geekotic? Podés ver ese post como ejemplo.
Este método no lo conocía. Yo me pregunté hace mucho lo mismo que Lagarto y utilicé para ello los comentarios condicionales:
<!--[if IE]>
Contenido a mostrar
<![endif]-->
Si me dejas hacerte un poquito de spam. :$
Otra pregunta, ¿se podría aplicar esto a los comentarios de blogger? :D
Lagarto:
Poder se puede, lo que ocurre es que habría que saber qué tipo de ventana modal quieres usar. todo dependerá de eso ya que cada una se lanza de modo diferente. Supongamos que fuera algo como estas, entonces, en lugar de "... está usando Internet Explorer y hacemos algo ...", llamaríamos a la función que abre esas ventanas:
showDialog('nombre',''TITULO','contenido','tipo',tiempo);
Hay muchas alternativas posibles.
LeonardoN:
Si, con JavaScript se puede generar cualquier tipo de contenido HTML; por ejemplo, en el mismo lugar anterior:
document.write("<a href='direccion' > descargar </a>");
Espineli:
Detectarlo en los comentaristas es lo mismo pero, en realidad, de nada serviría porque ?dónde guardarías ese dato? Para eso, se requiere tener una base de datos y un lenguaje que la maneje.
Para LeonardoN
bueno si el JMiur me lo permite y aprueva este comentario, he logrado crear el efecto que tu dices con enlaze de descarga y ademas es un enlaze con imagen y tien dos opcionesa de escarga google chrome y mozilla, si te interesa ver el ejemplo mira en mi blog pero usando internet explorer http://xkflowne.blogspot.com
aqui te dejo todo el codigo que utilize tal cual esta en mi blog ya es cuestion tuya si te agrada o no o si le quieres modificar algo.
NOTA: el codigo no es completamente mio, yo modifique imagenes y textos de el codigo original que se ofrece en otra pagina y asi pude mejorarlo a mis gustos.
Descarga el codigo de aqui y si gustas pegalo tal cual en cualquier gadge html de tu blog y modificalo para que quede a tu gusto.
http://sites.google.com/site/xkflowne/archivo/advertenciaExplorer.txt
Le permito, Don Lagarto :D
JMiur y como seria para que identifique safari también.
No tengo Safari instalado para responder eso. Coloca el script y fíjate que dice navigator.userAgent en Safari y si se diferencia de lo que dice Google Chrome y luego, colcoa esa palabra o palabras en otro IF:
} else if (navigator.userAgent.indexOf('PALABRAS') !=-1) {
...........
}
¿Se puede impedir el asceso sin Javacript? si es asi me puedes dar el codigo principal.(Ya me encargo yo de que no entre :) )
¿Impedir el acceso?
Si esque querio proteger una pagina con contraseña y sin JS entras perfectamente
Eso sólo puede hacerse con lenguajes que sean ejecutados en el servidor y no en el navegador ya que sino, forman parte del código fuente que cualquiera puede ver. Requiere usar PHP, por ejemplo y un servidor que lo procese, cosa que Blogger no hace.
Mil gracias, me estaba comiendo el coco acerca de cómo diferenciar con javascript Mozilla y Chrome.
navigator.appCodeName Me ayudo mucho
Muchas gracias
Hola JMiur,
He tenido algunos problemas los estilos, las margenes se ven diferentes en Chrome y en Firefox, intente cambiar los estilos utilizando el código que recomiendas, pero no sucede nada, esto es lo que hago:
if (navigator.userAgent.indexOf('Firefox') !=-1)
{document.getElementById('HTML2').style.marginTop="-20px";}
else if (navigator.userAgent.indexOf('Chrome') !=-1) {
{document.getElementById('HTML2').style.marginTop="-50px";}
incluso intenté cambiar la clase completa:
document.getElementById('HTML2').className = "nuevoEstilo";
Pero tampoco funciona, sabes que puedo estar haciendo mal?
¿En que blog ocurre eso? Porque, salvo que se estén usando márgenes negativos erróneos para compensar cosas, no debería verse distinto; es probable que todo sea debido a eso y pueda ser solucionado de modo más natural.
Tampoco me dices en que parte del sitio está ese script. Debería ejecutarse después de crearse ese elemento HTML2 y no antes o se producirá un error ya que el elemento no existe.
Por último, en la última línea estás colcoando una llave de apertura extra que debe ser eliminada:
if (navigator.userAgent.indexOf('Firefox') !=-1){
document.getElementById('HTML2').style.marginTop="-20px";
} else if (navigator.userAgent.indexOf('Chrome') !=-1) {
document.getElementById('HTML2').style.marginTop="-50px";
}
Tienes razón, JMiur.
Tenia unos margenes definidos como negativos y se solucionó cambiando la posición y no la margen,en lugar de margin-top:-20px, coloqué top:-20px; e hice los ajustes necesarios, sin embargo, me gustaría saber como se aplicaría el script, esta entonces bien escrito, corrigiendo el corchete, y debería funcionar, pero donde debe ubicarse, por que intenté ponerlo después de la definición del widget HTML2 en el html, y no me lo permite, podrías explicarme como hacerlo? es que aun hay una margen que no logro corregir, el blog en cuestión es este: http://venuspostres.blogspot.com/p/contacto.html si te fijas, la margen del final del blog en las paginas de entradas y estáticas se ve diferente en Firefox y en Chrome.
Muchas Gracias por tu ayuda y por tu web, han sido de muchísima utilidad.
No veo diferencia alguna en el footer de ese blog enter lo que muestra Chrome y lo que muestra Firefox. No sé qué diferencia ves.
El script debe estar después; puedes ponerlo en cualquier parte pero siempre después del div. Como usas jQuery, también puedes ponerlo en el head con el resto y usar dosument.ready de este modo:
$(document).ready(function(){
aca el script
});
Entiendo, muchísimas gracias JMiur
Chido... me detecta todos mis navegadores pero IE (11)me dice navegador no determinado...
IE11 ya no devuelve MSIE ya que se ha acomodado a los estándares de la w3.org; cómo detectarlo dependerá del uso que quieras darle al script ya que debe ser modificado y el dato dependerá del sistema operativo.
En Windows 8, user-agent devuelve:
Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko
En Windows 7:
Mozilla/5.0 (Windows NT 6.1; Trident/7.0; rv:11.0) like Gecko
Mira los detalles en msdn.microsoft
y si detecto que el explorador en IE pero necesito que automáticamente se ejecute el Chrome y se abra la aplicación en este navegador se puede hacer?
¿Quiere dejar un comentario?
recuerde que los comentarios están siendo moderados y serán publicados a la brevedad ...
Nota: sólo los miembros de este blog pueden publicar comentarios.
Si le gusta ir a lo seguro utilice este botón para abrir los comentarios en una ventana modal en esta misma pagina.
Si añora tiempos idos, use este enlace para agregar un comentario al viejo estilo ...