miércoles 6 de septiembre de 2006

Flash Válido (mejor que flash satay)

David Gruni es un checo que propone este método para insertar flash en documentos XHTML Strict válidos, usando comentarios condicionales para lograr la cross-browser-isidad.

El codigo final es asi:


<!--[if !IE]> -->
<object type="application/x-shockwave-flash"
data="movie.swf" width="300" height="135">
<!-- <![endif]-->

<!--[if IE]>
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0"
width="300" height="135">
<param name="movie" value="movie.swf" />
<!--><!---->
<param name="loop" value="true" />
<param name="menu" value="false" />

<p>This is <strong>alternative</strong> content.</p>
</object>
<!-- <![endif]-->


Usa comentarios condicionales NEGADOS, en la primera parte, para que el código sea para todos menos para IE. Y a la inversa luego.
Además, propone una forma de lidiar con el problema de Eolas del IE, donde los flashes necesitan "activarse" para interactuar con ellos. Me imagino que esta solución ya la habrán propuesto otros también, pero es simple:

var objects = document.getElementsByTagName("object");

for (var i=0; i<objects.length; i++) {
objects[i].outerHTML = objects[i].outerHTML;
a = ""+objects[i].outerHTML;
objects[i].outerHTML = a;
}
Ese javascript en un archivo externo, llamado con "defer" (para que se ejecute luego de cargar el dom, pero sin esperar a que se cargue todo el contenido), de esta forma:


<!--[if IE]>
<script type="text/javascript"
src="fix_eolas.js"
defer="defer"></script>
<![endif]-->

También usando comentarios condicionales.

Por otro lado, en mi post anterior hablo de una clase para administrar eventos que emula scripts externos con "defer" sin necesidad de crear scripts externos.

Usando mi clase, podríamos englobar el código como una función fix_eolas() y llamarlo de la siguiente forma:

EventMgr.add(window,"load",fix_eolas);


De esta forma tendríamos un método para incluir flashes standard y con el workaround de eolas sin necesidad de usar mas archivo (ni js - como en el método que se propone antes, ni swf - como en flash satay).

Creo que hemos arribado al ideal para insertar flash!

Actualización: 01/oct/2006
He descubierto que el método que propongo para arreglar el problema de eolas causa que a veces, en algunas configuraciones no aparezca el objeto incrustado. Este problema es aleatorio y por eso no fué descubierto antes.
En las pruebas que se hicieron, el cambio en el método pareció solucionar el problema.
Ahora ya no asignamos más directamente outerHTML, sino que usamos una variable intermedia, llamada a, que contiene unas comillas y el outerHTML, para estar seguros de que no está haciendo una referencia sino una copia del contenido.

4 personas dijeron algo:

Anónimo dijo...

Parece interesante, ya mismo lo voy a probar porque el satay nunca me convenció.

saludos!

Anónimo dijo...

si definitivamente, no solo mejor método, tambien mas facil que el satay

daniel dijo...

Una duda el fix_eola funciona para internet explorer 7. Lo eh probado pero no me anda en ie7, por alli encontre algo de info y al parecer solo funciona para ie6.

Faras dijo...

Daniel:
A esta altura no estoy seguro, hace rato que no trabajo con flash.
¿Estás seguro que es necesario hacer click para activar en la última versión de IE7?
Tengo la sensación de que no hace falta, por lo tanto el fix_eolas no sería necesario para IE7.