FlashObject, Express Install y precargas

Este fin de semana bajé FlashObject el maravilloso método de Geoff Stearns para embeber contenido Flash dentro de un HTML con el objetivo de implementar la opción Express Install en mis aplicaciones. El caso es que el único problema que tuve fue debido a que últimamente suelo colocar todo mi contenido fuera del primer frame de mi SWF y suelo exportar mis classes en un frame distinto del primero con el objetivo de poder hacer una precarga correcta de la aplicación.

Debido a que la funcionalidad de instalación expresa está dentro de una clase he tenido que modificar la clase y convertirla en un script (el cual también os puede valer si estais usando ActionScript 1.0). Recordad que esta funcionalidad se puede usar desde el Flash Player 6.0.65.0.

if (_root.MMplayerType == undefined) {
	// --- upgrade don't needed
	gotoAndPlay(2);
} else {
	stop();
 
 	var updater:MovieClip;
	var hold:MovieClip;

	loadUpdater = function() {
		System.security.allowDomain("fpdownload.macromedia.com");
		
		updater = _root.createEmptyMovieClip("expressInstallHolder", 10000000);
		updater.installStatus = installStatus;
		hold = updater.createEmptyMovieClip("hold", 1);
	
		updater.onEnterFrame = function() {
			if (typeof hold.startUpdate == 'function') {
				loadInit();
				delete this.onEnterFrame;
			}
		}
	
		var cacheBuster = Math.random();
		hold.loadMovie("http://fpdownload.macromedia.com/pub/flashplayer/update/current/swf/autoUpdater.swf?"+cacheBuster);
	}
	
	loadInit = function() {
		hold.redirectURL = _root.MMredirectURL;
		hold.MMplayerType = _root.MMplayerType;
		hold.MMdoctitle = _root.MMdoctitle;
		hold.startUpdate();
	}
	
	installStatus = function(statusValue) {
		if (statusValue == "Download.Complete") {
			// Installation is complete. In most cases the browser window that this SWF 
			// is hosted in will be closed by the installer or manually by the end user
		} else if (statusValue == "Download.Cancelled") {
			// The end user chose "NO" when prompted to install the new player
			// by default no User Interface is presented in this case. It is left up to 
			// the developer to provide an alternate experience in this case
			
			// feel free to change this to whatever you want, js errors are sufficient for this example
			getURL("javascript:alert('This content requires a more recent version of the Macromedia Flash Player.')");
		} else if (statusValue == "Download.Failed") {
			// The end user failed to download the installer due to a network failure
			// by default no User Interface is presented in this case. It is left up to 
			// the developer to provide an alternate experience in this case
			
			// feel free to change this to whatever you want, js errors are sufficient for this example
			getURL("javascript:alert('There was an error in downloading the Flash Player update. Please try again later, or visit macrmedia.com to download the latest version of the Flash plugin.')");
		}
	}
	
	// --- Start upgrade
	loadUpdater();
}

Por último un par de links relacionados:

Gracias a esta caracterí­sticas podemos llegar en muy poquitos meses a una penetración del Flash player 8 nunca antes vista :).

8 Comentarios

  1. Genial, no lo habí­a probado todaví­a pero me lo has dejado en bandeja 🙂
    Funciona de maravilla!
    Realmente esta caracterí­stica es para mi una de las más esperadas junto con el upload de archivos. Dirí­a que era un requerimiento básico.

    Gracias!

  2. Hola Carlos,
    Esto me parece genial, siempre he tenido que hacer malabares con los scripts de deteccion.
    Un detalle del código:
    ¿No serí­a mejor utilizar un timestamp en vez de un random? El timestamp es infalible, puesto que el tiempo siempre corre 😛

    [code] var cacheBuster = new Date.getTime() [/code]

  3. @Joan: Estupendo! me alegra que te sirva, yo también lo estoy usando estos dí­as y de momento va genial. Me encanta ver que para el usuario estos procesos son cada vez más transparentes : )

    @jorge: Creo que aquí­ se trata de una cuestión de gusto a la hora de introducir ese elemento al azar. Lo que propones es igualmente válido, pero el método de Geoff también lo es. 🙂

  4. Disculpame pero no entiendo, embeber flash dentro de un HTML.. que eso no se hacia ya desde hace tiempo?? Me podrias aclarar un pco mas la cosa xq no entiendo la funcionalidad de la li breria esa que dices.

  5. Claro NeCuDeCo,

    De toda la vida hemos usado la manera standard y más sencilllo usando el el tag object en html.

    Este método (entre otras cosas) lo hace más sencillo y además permite detectar el plugin en la mayorí­a de los navegadores, permite que tu HTML se pueda validar como XHTML, y maneja temás como la instalación expresa de una manera sencilla (además de otras cosas como el paso de variables a flash…).

    Es decir añadiendo un javascript al conjunto de tus ficheros, el proceso se introducir Flash se hace más sencillo, compatible y accesible.

    Un saludo.

  6. Hola Carlos,
    espero que te vallan tan bien las cosas como los artí­culos que escribes aquí­.
    Tengo ciertas dudas con la función que has creado del Express Install.
    No estoy seguro si funciona correctamente al no usar la clase de FlashObject (Geoff Stearn), quiero decir, embebiendo el swf al modo tradicional en el html.
    En el ordenata de un amigo ( MAC a estrenar G5) no detecto el plugin de flash.
    La pregunta es, si es requisito obligado el usar la clase FlashObject (Geoff Stearn) para que funcione al 100% el Express Install que has creado.

    Bueno un abrazo Carlos y feliz año!!!!

    Rafael Martí­nez

  7. Hola Rafa y Feliz Año a ti también! ;),

    La solución de Geoff es una combinación de Javascript + su clase, puesto que se pasan variables al SWF para que este sepa si queremos realizar un ExpressInstall y si se debe producir. Al no saber mucho de MACs no puedo decirte nada al respecto pues no tengo experiencia con esas máquinas :(. La versión que ves aquí­ es solo una adaptación AS1 del script de Geoff debido al problema de que yo exporto todo en un frame distinto del 5.

    Mi consejo es que uses la distribución de Geoff (de hecho a sacado una actualización hace unos dí­as) tal y como viene, pues es muy útil y potente, y solo uses este script en el caso de que tengas el mismo problema que yo de la exportación de clases.

  8. Gracias Carlos,
    la verdad es que si tengo ese problema, supongo que al igual que muchos, ya que sino tendrí­amos la ventana vací­a un rato hasta cargar todos los .as
    Bueno, le echaré una mirada nuevamente a la solución de Geof.
    Lo que viene a quedarme claro, es que trabaja en conjunto con la adaptación de la clase que tu has echo.

    gracias de nuevo
    Rafael Martí­nez

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *