JavaScript: superar las diferencias entre Netscape y Explorer
Los fabricantes de software son conscientes de que aquel que consiga imponer un estandar en la Red tiene todas las bazas para ganar la batalla comercial. Esto tiene un lado positivo para los consumidores e incluso para los desarrolladores de sitios web. La competencia ha hecho evolucionar rápidamente las tecnologías y los programadores cuentan cada vez con un abanico mayor de posibilidades para llevar a cabo sus proyectos. Sin embargo la carrera por definir e implantar estándares ha traído también que cada fabricante incluya en sus aplicaciones características propias e incompatibles con respecto a los productos de la competencia. Los navegadores ha sido uno de los campos de batalla donde más se ha hecho notar.
Los desarrolladores se ven obligados con frecuencia a crear dos versiones de las mismas páginas. Esto, que por si mismo representa una pérdida considerable de tiempo al crear proyectos, tiene desatrosas consecuencias en el mantemiento posterior de las aplicaciones web. Cuando una parte de la aplicación cambia, por ejemplo se modifica todo el diseño del sitio web, los programadores se ven abocados a mantener actualizadas dos copias de lo mismo, con todos los problemas que supone. Estas y otras razones son las que llevan a sostener que lo mejor es siempre desarrollar una única versión de nuestras páginas, compatible al menos con los dos navegadores que actualmente dominan el mercado: Netscape Communicator e Internet Explorer.
Existen multitud de trucos de programación y diseño que conviene tener en mente, pero por encima de todo el elemento que va a permitir alcanzar la compatibilidad es el lenguaje Javascript. Este lenguaje de script sirve para introducir código fuente en las páginas HTML. El código se ejecuta en el navegador del cliente y presenta una forma de acceder y/o modificar los distintos elementos de la página web, así como de responder a los deteminados eventos que se producen cada vez que el usuario hace algo.
[Detectar el tipo navegador]
La primera lección que todo desarrollador debe conocer consiste en aprender cómo es posible detectar el tipo de navegador con Javavascript. Esto puede hacerse de distintas formas y, como verá más adelante, cada una se ajusta mejor a una determinada situación. Normalmente los scripts de Javascript comenzarán siempre detectando el navegador y entonces se obrará de una forma u otra.
[La forma clásica]
El lenguaje Javascript cuenta con el objeto navigator que almacena información relativa al navegador y el sistema operativo del usuario. Desde el mismo momento en el que se empieza a cargar la página, el objeto toma la información. Las propiedades de un objeto representan la forma en la que se pueden conocer los datos que este atesora. En Javascript para hacer referencia a una propiedad se escribe el nombre del objeto seguido de un punto y el nombre de la propiedad a continuación. El objeto navigator proporciona cuatro propiedades por las que podemos saber el navegador.
navigator.appCodeName: guarda información relativa al nombre del núcleo principal entorno al cual se ha desarrollado el navegador.
navigator.appName: almacena el nombre del navegador. Puede utilizarse como criterio para diferenciar aunque no suele ser suficiente ya que no dice nada acerca de la versión del navegador.
navigator.appVersion: guarda la información relativa a la versión del navegador.
navigator.userAgent: suele utilizarse para diferenciar entre navegadores. Contiene una cadena de texto donde aparecen, entre otros datos, la versión del navegador, nombre, e incluso el sistema operativo donde está siendo utilizado.
navigator.platform: indica la plataforma donde se ubica el navegador.
Es preciso saber cómo extraer la información que se desea. Las propiedades anteriores devuelven cadenas de texto y hay que buscarlas. Javascript dispone del método indexOf que se aplica a todo objeto de tipo String (a cualquier cadena de texto). Recibe como parámetro una cadena de texto y devuelve la posición a partir de la cual se encuentra esa cadena dentro de la original. En el caso de encontrarla, indexOf devuelve el valor -1. Veamos un ejemplo:
Var mi_cadena = "Ray of light";
If (mi_cadena.indexOf("of") != -1) {
// Si la variable contiene la subcadena "of"
} else {
// Si la variable no contiene la subcadena "of"
}
En el ejemplo anterior se distinge entre mayúsculas y minúsculas. Si se buscara la cadena "OF" el método devolvería -1. Pa