¿Qué le pasa al DOM? Aparte de la sintaxis inspirada en Java (que Crockford ha mencionado), nada.
Lo que está "incorrecto" se aplica parcialmente a los proveedores de navegadores; lo que está "mal" se aplica a los desarrolladores; lo que está "mal" se aplica a la ignorancia.
Entonces, ¿por dónde empezar?
Por la madriguera del conejo…
Proveedores de navegadores
En primer lugar, los proveedores de navegadores han luchado competitivamente durante décadas para ser los "mejores", "más rápidos", "más fáciles", etc. En la primera década (199x-2000), Microsoft gobernó el gallinero. Internet Explorer introdujo ideas innovadoras como:
- exponiendo el motor de análisis HTML del navegador como
innerHTML
y
outerHTML
;
- fácil manipulación textual con
innerText
y outerText
;
- un modelo de evento (
*tachEvent
) que fue el modelo para los eventos DOM Nivel 2 ( *EventListener
).
Cada uno ha contribuido (para bien o para mal) significativamente a la pila de desarrollo web actual. Opera incluso llegó a implementar los tres en la versión 7 (2003).
Sin embargo, Netscape tenía su propio modelo de evento DOM ( *EventListener
). En 2000, se convirtió en la especificación DOM Nivel 2 Eventos. Safari 1 (2003) implementó este modelo; Opera 7 (2003) también implementó este modelo. Cuando las ruinas de Netscape se convirtieron en Mozilla, Firefox 1 (2004) heredó el modelo.
Para la primera sección de la segunda década (2000-2004), Microsoft reinó supremo. Internet Explorer 6 (2001) era, de lejos, el mejor navegador de la época. Uno de sus competidores, Opera 6 (2001), aún no había implementado el DOM Level 1 Core ( createElement
et al.) Microsoft lo implementó en Internet Explorer 4 (1997) antes de que la especificación se convirtiera en una recomendación (1998).
Sin embargo, la segunda sección de la segunda década (2004-2010) resultaría desastrosa para Microsoft. En 2003, Apple lanzó Safari 1.0; en 2004, Mozilla completó Firefox 1.0. Microsoft aparentemente estaba dormido en su trono en la cima de la montaña del navegador. Internet Explorer 7 no se lanzó hasta 2006: una brecha de cinco años que se remonta a la fecha de lanzamiento de Internet Explorer 6. A diferencia de las versiones de Internet Explorer 4 a 6, la versión 7 innovaba poco; Los cambios DOM fueron minutos. Casi dos años y medio después, se lanzó Internet Explorer 8. Microsoft se había despertado de su sueño y notó la unión de otros proveedores de navegadores en torno a numerosos estándares web. Desafortunadamente, había pasado demasiado tiempo desde la última innovación real de Microsoft. Se había creado un movimiento entre los vendedores de navegadores. Se agregarían nuevas características DOM en forma de especificación al W3C; Las ideas de Microsoft quedaron en el pasado. Modelo de evento de Microsoft (*tachEvent
) se evitó para el modelo DOM Nivel 2 Eventos. Internet Explorer no implementó el modelo anterior hasta la versión 9 (2011), que se convirtió en el modelo DOM Nivel 3 Eventos.
Las locuras de Microsoft (DOM) se pueden resumir en los siguientes puntos:
presencia como una característica central de Windows, y los requisitos de seguridad a nivel del sistema operativo resultantes;
dependencia de ActiveX para el código del lado del cliente;
innovación que disminuyó curiosamente después de la versión 6 (2001).
(Desarrolladores de sitios de Internet
En segundo lugar, los desarrolladores tienen cierta culpa. A medida que la web continúa despegando, más y más personas están "incursionando" en el desarrollo web. Esto había llevado a una dilución en talento y ética de trabajo. El problema, sin embargo, radica principalmente en la actitud. "Hacerlo rápido" ha prevalecido sobre "Hacerlo bien". Como resultado, innumerables páginas web son incompatibles con varios navegadores. Una de las principales causas de esta incompatibilidad es una práctica llamada "detección de agentes de usuario". Aunque la práctica todavía se usa en la actualidad, se ha demostrado que es errónea y dañina. Opera incluso llegó a "congelar" la versión del agente de usuario en "9.80" en la versión 10 (2009) y más allá. Esto tenía la intención de evitar que los scripts erróneos se rompieran. Una práctica mucho mejor llamada "
Ignorancia
En tercer lugar, mi punto de culpa preferido es la ignorancia; ignorancia en el hecho de que los proveedores de navegadores no trabajaron juntos lo suficiente como para crear especificaciones unificadas; ignorancia en el hecho de que Microsoft rechazó a los usuarios de otros navegadores; ignorancia en el hecho de que los desarrolladores son demasiado flojos o demasiado miopes para molestarse en buscar navegadores (especialmente aquellos que no están de moda ). Existen muchas diferencias en las API y las implementaciones. La mayoría se puede evitar con un enfoque simplificado pero defensivo (dependencia del DOM 0) junto con grandes cantidades de investigación y pruebas. La ignorancia ha llevado a la noción de que Internet Explorer 6 es una plaga en la Tierra (recuerde su lugar en el trono del navegador mencionado anteriormente).
Reflexión
Lamentablemente, el DOM es solo una API incomprendida. Muchos desean arrojar piedras (a través de FUD), pero pocos desean aprender sus complejidades. Un resultado de esta ignorancia es la introducción de "selectores" DOM. El DOM en el fondo es una API para manipular árboles de documentos. El recorrido del árbol debe usarse para problemas complejos dada la forma de un documento analizado. Con la introducción de la API de Selectores DOM, un desarrollador ahora puede aprovechar el motor transversal CSS del navegador. Esto es bastante conveniente, pero oculta la verdadera forma de un árbol de documentos. Con "selectores", la recuperación del nodo del elemento es elemental. Sin embargo, el DOM tiene otros once tipos de nodos especificados. ¿Qué pasa con los nodos de texto? Nodos de comentarios? Nodos de documento? Estos también son nodos que a menudo se desean al interactuar con el DOM.
Conclusión
En resumen, tómese su tiempo y lea las diversas especificaciones DOM. Pruebe el código en tantos navegadores como sea posible. Si se percibe que Internet Explorer se comporta de manera extraña, consulte a MSDN. Muy a menudo, el comportamiento está documentado.
(Las anécdotas históricas pueden y pueden ser inexactas; cualquier inexactitud es bienvenida).
-Mate
Apart from cross-browser inconsistencies
¿No es eso suficiente?