Nos ha ocurrido: has tomado toda precaución para que tu página sea standard-compliant y de repente se te ocurre (por cualquier razón) insertar una animación en flash o un video de youtube... la muerte caballero... se generan una docena (al menos) de errores.
Resulta que los tags de EMBED y OBJECT son demasiado nuevos y no fueron considerados en las especificaciones, o al menos eso dice W3. Las soluciones existentes son demasiado elaboradas para mí gusto. Ver el método de Flash Satay. Pero... ¿no habrá una solución más sencilla?
Mi solución: simplemente, no validarlo. Es decir, si el único problema en mi página es el código para flash, y W3 no me puede proporcionar ningún estándar, entonces lo que hay que hacer es sacar ese código de la página y validarla, PERO manteniendo la misma animación en la página. Este proceso es sencillo y práctico, y depende de Javascript. Ya sé que los puritanos empezaran a afilar sus espadas, señalándome que si Javascript es deshabilitado entonces simplemente no se desplegará nada, y tienen razón, pero explicaré por qué es conveniente usar Javascript para esta tarea.
Bajo las siguientes observaciones:
De tal forma que, habiendo aplacado al pelotón de fusilamiento, vayamos al grano.
La forma de hacerlo peca de sencilla. Tomemos como ejemplo el siguiente código, de una animación, generada por flash:
<OBJECT classid="anim1"
codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0"
WIDTH="550" HEIGHT="400" id="Untitled-2" ALIGN="">
<PARAM NAME=movie VALUE="HOYOS_animation.swf"> <PARAM NAME=quality VALUE=high> <PARAM NAME=bgcolor VALUE=#FFFFFF> <EMBED src="HOYOS_animation.swf" quality=high bgcolor=#FFFFFF WIDTH="550" HEIGHT="400" NAME="Untitled-2" ALIGN=""
TYPE="application/x-shockwave-flash" PLUGINSPAGE="http://www.macromedia.com/go/getflashplayer"></EMBED>
</OBJECT>
El código es muy largo, por desgracia. Pero bueno, no vamos a entrar en detalles sobre cada uno de los TAGS. No nos concierne en este momento.
Lo que vamos a hacer es insertar ese código en un archivo distinto, con extensión .js para que se entienda que es Javascript y añadirlo a la instruccion document.write(). Y en lugar de todo el chorizote anterior, cambiarlo por la siguiente línea de código:
<script src="insert.js" type="text/javascript"></script>
donde insert será el nombre del archivo. Para este punto el HTML está terminado, sólo falta arreglar un detalle en la sintaxis del código, del archivo .js, ya que nos falta agregar la instrucción de escritura document.write y pulir la sintaxis para que reconozca las comillas dentro de las comillas del string:
document.write(" INSERTAR INSTRUCCIÓN "); y sustituir cada caracter " por \" y los saltos de línea por espacios, para que todo quede en un mismo renglón. De tal forma que nos queda así el contenido del archivo de javascript
document.write("<OBJECT classid=\"anim1\" codebase=\" http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0\" WIDTH=\"550\" HEIGHT=\"400\" id=\"Untitled-2\" ALIGN=\"\"> <PARAM NAME=movie VALUE=\"HOYOS_animation.swf\"> <PARAM NAME=quality VALUE=high> <PARAM NAME=bgcolor VALUE=#FFFFFF> <EMBED src=\"HOYOS_animation.swf\" quality=high bgcolor=#FFFFFF WIDTH=\"550\" HEIGHT=\"400\" NAME=\"Untitled-2\" ALIGN=\"\" TYPE=\"application/x-shockwave-flash\" PLUGINSPAGE=\"http://www.macromedia.com/go/getflashplayer\"></EMBED> </OBJECT>");
De tal forma que tenemos insertada la siguiente animación. El validador de XHTML validará correctamente esta página e ignorara la liga del Script.