Hola,
en primera, la explicación de
PatomaS es tan completa y correcta que no sé cómo no es todavía parte del FAQ
.
También
Edypu tiene razón. Es bastante seguro asumir que quien tiene JavaScript tiene Flash y vicecersa. Yo uso este par de funciones basadas en
una propuesta de Peter-Paul Koch:
Código:
function has_flash(){
x = navigator.mimeTypes['application/x-shockwave-flash'];
if (x) return x && x.enabledPlugin;
else if(navigator.plugins && navigator.plugins.length){
if (navigator.plugins["Shockwave Flash"]) return true;
else return (navigator.plugins["Shockwave Flash 2.0"]);
}
else {
for(var i=10; i>0; i--){
try {
var flash = new ActiveXObject("ShockwaveFlash.ShockwaveFlash."+i);
return true;
}
catch(e){}
}
return false;
}
}
function flash_replace(id,swf,w,h){
w = (typeof w == 'number')?(' width="'+w+'"'):'';
h = (typeof h == 'number')?('" height="'+h+'"'):''
if (has_flash()){
document.getElementById(id).innerHTML = '<object type="application/x-shockwave-flash" data="'+swf+'"'+w+h+'>'+
'<param name="movie" value="'+swf+'" />'+
'<param name="quality" value="high" />'+
'<param name="pluginurl" value="http://www.macromedia.com/go/getflashplayer" />'+
'<param name="menu" value="false" />'+
'</object>');
}
}
En resumen, hay tres formas de encontrar Flash: por navigator.mimeTypes, navigator.plugins (ambas
documentadas en el soporte oficial de Flash) y por medio de ActiveX. En caso de encontrar Flash, la función
flash_replace reemplaza el contenido del elemento con ID
id (de preferencia un <div>) con un objeto Flash construido de acuerdo a
Flash Satay. El parámetro
swf es el URL del archivo Flash, y se pueden definir ancho y alto. Lo he probado en Firefox 2, Opera 9, Safari 2 y Explorer 7. Tal vez el único gran problema sea el evento al cual ligarlo: si se llama a
flash_replace dentro de
window.onload hay que esperar a que termine de cargar el documento, incluyendo cualquier imagen. Hay diferentes formas de enfrentar esto, como document.DOMContentLoaded o un javascript defer, pero no tengo la documentación a la mano y tal vez esté un poco fuera de tema.
Espero que sea de utilidad. Saludos