2009-09-10 9 views
5

Dado un gran proyecto heredado que utiliza ASP.NET, javascript, css, etc., me preguntaba si cambiar el DOCTYPE de las páginas web, por ejemplo, de HTML 4.0 Transitional a XHTML 1.0 Transitional (o al revés) en cualquier forma podría romper las funciones de javascript de las páginas web.¿La elección de DOCTYPE afecta el DOM como se ve por el código de JavaScript?

Hay muchos artículos y discusiones acerca de cómo los diferentes DOCTYPES afectan la representación de páginas (css), pero parece que no encuentro nada similar sobre el tema de romper un código.

Estoy buscando enlaces a artículos sobre temas a tener en cuenta para, en general, detectar problemas potenciales en el código existente y evitar crear problemas al escribir código nuevo.

Respuesta

5

Ya sea cambiando DOCTYPE se romperá ninguna función javascript realmente depende de cómo la defensiva esas funciones están diseñados :)

Por ejemplo, cuando documento se presenta a modo de peculiaridades, document.body (el cuerpo) se convierte en un llamado "root elemento"; cuando se procesa en modo estándar, ese elemento raíz suele ser document.documentElement (HTML). Esta es una distinción bastante sustancial. Si un script que determina el tamaño de la pantalla del navegador siempre consulta las propiedades clientWidth/clientHeight de document.documentElement, obviamente informará los resultados incorrectos en el modo peculiar (ya que, IIRC, document.documentElement.clientWidth/clientHeight representaría las dimensiones del elemento HTML, en lugar de las de la pantalla).

La mayoría de las bibliotecas JS suelen indicar explícitamente si se admite el modo peculiar (nosotros, Prototype.js, por ejemplo, no admitimos el modo peculiar).

Hablando de HTML vs XHTML, con el fin de navegador muestre documento como XHTML, debe en primer lugar servir con adecuada "Content-type" de cabecera (es decir application/xhtml + xml). Si solo cambia doctype a XHTML one, pero aún sirve el documento como "text/html", la mayoría de los navegadores que conozco aún lo analizará (y lo renderizará) como documento HTML.

Tenga en cuenta que IE no entiende el contenido XHTML "real", por lo que es recomendable utilizar documentos como text/html (con HTML4.01 doctype) (a menos que IE no se encuentre entre los navegadores compatibles) , por supuesto).

En cuanto a las peculiaridades de DOM en documentos XHTML "reales", he oído que algunas cosas como document.write "no funcionan" y que el acceso a los atributos de nodo siempre se deben realizar a través de getAttribute/setAttribute (en lugar de a través de acceso de propiedad más simples) . IIRC, también hay algunos problemas con innerHTML.

La falta de información sobre DOM en documentos XHTML "reales" probablemente se deba a su impracticabilidad en documentos/aplicaciones para web general (es decir, la falta de soporte de IE para esto).

+0

En algunos de los modos de documento, los elementos dom no heredan de Object.prototype y, por lo tanto, no se pueden extender con métodos o propiedades personalizados ... – inf3rno

1

Si está utilizando la DTD:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 

entonces su sitio está en modo de peculiaridades en el IE y el modo casi-estándares en los navegadores modernos, y porque el DTD XHTML 1.0 de transición obliga a la página para estar en modo estándar habrá problemas de diseño y posibles problemas en el Javascript (especialmente en IE) ya que hay algunas diferencias significativas entre cómo se representa el DOM en peculiaridades frente a estándares.

Sin embargo, si el código HTML 4.01 DTD contiene el identificador del sistema:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
"http://www.w3.org/TR/html4/loose.dtd"> 

Ya debería estar en modo de estándares. Puede verificar consultando 'document.compatMode' en su sitio, dirá 'CSS1Compat' si está en estándares, de lo contrario 'BackCompat' si está en modo peculiar.

Supongo que va a publicar un Tipo de contenido de texto/html con XHTML 1.0 Transitional.

+0

He verificado el problema del tipo de documento parcial/total. Hice una prueba similar para un doctype parcial/completo xhtml 1.0 y parece que tanto y la causa de los navegadores para representar la página en el modo de cumplimiento de normas, es decir, el tipo de documento xhtml parcial no fuerza a la página al modo peculiar, como es el caso del HTML 4.01. Extraño. –

Cuestiones relacionadas