Firefox tiende a cumplir con
alegría la especificación de JavaScript actual (la 1.8 y en breve la 2.0,
también llamada ECMAScript pues ECMA es la entidad encargada de estandarizar
JavaScript), mientras que IE, como todo lo de Microsoft, se escora hacia lo
propietario, utilizando formas de acceso a propiedades no estandarizadas o,
incluso, inventándose nuevas. De hecho, la versión de JavaScript de Microsoft se
llama JScript, siendo diferentes el conjunto de objetos y propiedades accesibles
desde JavaScript y desde JScript (distintos árboles
DOM).
Si se programa únicamente pensando
en IE (JScript) queda en el aire qué pasaría con navegadores que, siendo
compatibles con JavaScript, no lo sean con JScript: Opera, Safari, Netscape,
Konkeror,... y un largo etcétera de los mackeros y
linuxeros.
Sin embargo, si se lleva todo
hacia JavaScript perdemos al navegador potencialmente más frecuente, el
IE.
Solución: de compromiso, como
siempre.
Se coge el Firefox y se le instala
un parseador o intérprete de JavaScript con consola de errores (recomiendo la
extensión Firebug
Por cada uno se ve la llamada
equivalente estándar que debería funcionar y se ponen las dos opciones, con un
if-then-else.
EJEMPLO (no funcionaría en
Firefox):
var obj = null;
obj =
document.all("nombreelemento");
<acciones>
document.all NO funciona en
Firefox, pero sí en IE. Es común que la gente copie y pegue este código desde
cualquier ejemplo de Internet. (En realidad, las últimas versiones de Firefox sí
que son compatibles con la llamada document.all(“nombrelemento”), pero al
interrogar al browser por la existencia del método document.all devuelve
“false”, precisamente por compatibilidad con los estándares de
JavaScript.)
CÓMO
RESOLVERLO:
var obj = null;
if (document.all){ /* Requiere que los IDs sean únicos
en la página y que no coincidan con el atributo NAME de otros elementos. DOM de
JScript, IE.*/
obj =
document.all["nombreelemento"];
} else if (document.getElementById){ /* Para navegadores
que soporten el DOM W3C. Firefox. */
obj =
document.getElementById("nombreelemento");
}
<acciones>
MÁS RÁPIDO AÚN (usando la forma
abreviada del if-else):
var obj = document.all ? document.all("nombreelemento")
: document.getElementById("nombreelemento");
<acciones>
OTRA POSIBILIDAD: que haya
propiedades sin correspondencia, por ejemplo:
La tecla pulsada en IE se recoge
en event.keyCode y en Firefox (y demás W3C compatibles) en
event.which.
if (((document.all) ? event.keyCode : event.which)==13)
<acciones>
IE leerá el event.keyCode y
Firefox event.which.
![]() |
Alfonso Diego de Gea García. Ingeniero Informático. |
| Artículos con licencia Copyleft |
|
Este artículo tiene libre licencia de reproducción siempre que se cite al autor que lo ha escrito y se enlace con su página web, tal como aparece en la firma del artículo.
Si eres tan amable, agradeceremos que coloques en algún lugar de tu web un enlace a la sección de artículos copyleft de DesarrolloWeb.com.
|
| Enlaces relacionados |
| + Puedes ver todos los artículos que ha publicado este usuario. |
| + Puedes ver más artículos de la categoría de Programación |
| + Ir a la portada de Artículos Copyleft |