Diferenciar entre navegadores y sus versiones

Etxe
03 de Julio del 2002
Estimados amigos:

Necesito algún script que sea capaz de diferenciar entre navegadores y a su vez entre versiones de estos. El motivo es que, a la hora de aplicar una hoja de estilo, varía muchísimo la interpretación que hace cada navegador, e incluso las versiones dentro de un mismo navegador. Así por ejemplo, Netscape 4.51 hace una interpretación diferente de los estilos que la que hacen las versiones de Netscape superiores a la 6. Por tanto, la única forma de dar un estilo coherente a la página es aplicar una hoja de estilo para Internet Explorer, otra para las versiones de Netscape inferiores a la & y una tercera para las versiones superiores a 6, y aquí es donde necesito vuestra ayuda.

Existe una función en JavaScript, navigator.appVersion, que captura la versión del navegador pero lo hace de la siguiente forma:

5.0 (Windows; es-ES)
4.51 [es] (Win98; I)
4.0 (compatible; MSIE 6.0; Windows 98)

Etc. Además de la versión en sí veo que esta función coge además otros datos como el idioma configurado en el navegador, etc. Por lo tanto, a la hora de hacer un script, necesitaría reflejar no solo las versiones, sino además todas sus posibles configuraciones, lo cual es imposible. Necesito por tanto hacer alguna función que solo se "fije" en la versión en sí (5.0, 4.51, etc), o mejor aún, que, por ejemplo, la versión sea inferior a 5.0 o superior a 5.0, y en consecuencia aplicar una hoja de estilo u otra.

Es muy importante que consiga solucionar esto, ya que me tiene atascado en el diseño de mi página, po lo que os agradecería un montón cualquier ayuda.

Un saludo.

Jose
03 de Julio del 2002
Vamos allá :D

function Is()
{
var agent = navigator.userAgent.toLowerCase();
this.major = parseInt(navigator.appVersion);
this.minor = parseFloat(navigator.appVersion);
this.ns = ((agent.indexOf('mozilla')!=-1) && ((agent.indexOf('spoofer')==-1) && (agent.indexOf('compatible') ==-1)));
this.ns2 = (this.ns && (this.major == 2));
this.ns3 = (this.ns && (this.major == 3));
this.ns4b = (this.ns && (this.minor < 4.04));
this.ns4 = (this.ns && (this.major >= 4));
this.ie = (agent.indexOf("msie") != -1);
this.ie3 = (this.ie && (this.major == 2));
this.ie4 = (this.ie && (this.major >= 4));
this.op3 = (agent.indexOf("opera") != -1);
this.win = (agent.indexOf("win")!=-1);
this.mac = (agent.indexOf("mac")!=-1);
this.unix = (agent.indexOf("x11")!=-1);
}
var is = new Is();
if (is.ns) {
document.write('<link rel=stylesheet type="text/css" href="HojaEstilo_ns.css" title="style">');
}
if (is.ie4) {
document.write('<link rel=stylesheet type="text/css" href="HojaEstilo_ie4.css" title="style1">'); }

Con la funcion Is() ahora puedes comprobar las versiones y nombres de los navegadores(como el opera, etc...) e incluso si es mac, linux o windows.

Fijate en las condiciones (this.ns && (this.major >= 4)). Estas te indican si es mayor o menor a la version que incluyes.

Este codigo lo he probado y funciona. Si tienes alguna duda dimelo e intentare ayudarte en lo que pueda.

Saludos,
Jose

Etxe
03 de Julio del 2002
Jose:

Muchísimas gracias por tu ayuda, el código que me indicastes funciona perfectamente. Únicamente lo he modificado un pelín, ya que en mi caso lo que me interesaba era diferenciar por un lado el navegador Internet Explorer, y por otro las versiones de Netscape superiores o iguales a 4 e inferiores a 5 y las superiores a 5 (Netscape 6 y superiores se identifican en realidad como versiones 5.0 de Mozilla)

Gracias de nuevo por tu ayuda y un saludo,
Etxe.