Tema: Flash o no?
Ver Mensaje Individual
  #7 (permalink)  
Antiguo 02/07/2007, 12:43
Avatar de demiurgo_daemon
demiurgo_daemon
 
Fecha de Ingreso: diciembre-2006
Ubicación: Querétaro
Mensajes: 184
Antigüedad: 17 años, 4 meses
Puntos: 2
Re: Flash o no?

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