Ultimamente he visto muchas preguntas acerca de insertar contenido Flash en nuestras páginas, que valide como XHTML y sea compatible con los principales navegadores.
Muchos se inclinan por la utilización de una librería JavaScript llamada SWFOject ó bien por un método alternativo, que requiere de los condicionales para IE y un swf extra(método Satay)
El siguiente método sólo utiliza HTML , no necesita de condicional alguno y valida para XHTML 1.0 Strict.
Código HTML:
Ver original<object type="application/x-shockwave-flash" data="b.swf" width="400" height="300"> <param name="movie" value="b.swf" /> <param name="loop" value="false" /> <param name="menu" value="true" /> <param name="play" value="true" /> <param name="bgcolor" value="#8897db" />
<p>Flash Player no se encuentra o la versión no es compatible, utiliza el siguiente link para ir a la página de descarga
<br /> <a href="http://get.adobe.com/es/flashplayer/" onclick="this.target='_blank'">Descargar Flash Player
</a>
Compatible con IE6+ - Firefox 3.4+ - Chrome - Opera 10+ - Safari 4
Sólo requiere de un pequeño javascript adicional para eliminar el molesto
"haga click aquí para activar este control" que Opera 10 aún sigue mostrando.
fix-object.js
Código Javascript
:
Ver original/* jActivating v.1.1.2 (compressed) - http://jactivating.sourceforge.net */
var jActivating = { isMSIE : (document.all && !window.opera) ? true : false, reinsertContent : function()
{ var totalNodes = new Array(3); totalNodes['object'] = document.getElementsByTagName('object').length; totalNodes['embed'] = document.getElementsByTagName('embed').length; totalNodes['applet'] = document.getElementsByTagName('applet').length; for(var tagName in totalNodes)
{ var counter = totalNodes[tagName] - 1; for(var node; node = document.getElementsByTagName(tagName)[counter]; counter--)
{ sourceCode = jActivating.getSourceCode(node); if(sourceCode)
{ node.outerHTML = sourceCode;}
}
}
jActivating.isMSIE = null;}, getSourceCode : function(node)
{ var sourceCode = node.outerHTML; switch(node.nodeName.toLowerCase())
{ case 'embed':
return sourceCode; break; case 'object':
case 'applet':
var openTag = sourceCode.substr(0, sourceCode.indexOf('>') + 1); var closeTag = sourceCode.substr(sourceCode.length - 9).toLowerCase(); if(closeTag != '</object>' && closeTag != '</applet>')
{ return null;}
if(jActivating.isMSIE)
{ var innerCode = jActivating.getInnerCode(node); sourceCode = openTag + innerCode + closeTag;}
return sourceCode; break;}
}, getInnerCode : function(node)
{ var innerCode = ''; var totalChilds = node.childNodes.length - 1; for(var counter = totalChilds, child; child = node.childNodes[counter]; counter--)
{ innerCode += child.outerHTML;}
return innerCode;}
}
if(document.attachEvent)
{ if(window.opera)
{ document.attachEvent("DOMContentLoaded", jActivating.reinsertContent);}
else
{ jActivating.reinsertContent();}
}
Y debe ser llamado dentro del Head de la siguiente manera
<script type="text/javascript" src="fix-object.js" defer="defer"></script>
Creo que es más sencillo y en cuanto a compatibilidad cubre las espectativas.
Les dejo una demo funcionando en
http://foros.emprear.com/flash/flash-xhtml.html
En este otro ejemplo, un flash al 100% de la pantalla.
http://foros.emprear.com/flash/flash-xhtml100.html
Saludos