SWFObject with Preloader

Here’s the online example SWFObject with Preloader, and the zipped version preloader-swfobject.zip

During the development of a rather big flash video portal, I noticed some difficulties with setting paths during the stages of development. The application made a lot of connections to external data: XML, Flash Media Server 3.5 and made call with a Microsoft .NET backend through FluorineFX remoting.

To make al this easily manageable I used a SWFObject to make it easy to transfer the application from Developing to Testing and finally to Production. The flash project was built in a way that the .NET developer needs to copy the SWFObject code and one includes folder to his backend. The includes folder contains all the swf, xml, img, javascript etc…

At that point the designer came with a preloader, which made the preloader.swf receive the SWFObject flashvars. I have made a Flash application template that works for me and the company I work for. But I am very curious if there are other, more neat ways to over come this problem.

The main feature of this template structure is that the preloader checks whether it has received a value form SWFObject. Based on the result of this check two different functions can be called in the main class of the main flash file.These functions sets the path for the flash file to make it work in the flash IDE or on the server with in HTML wrapper, after these paths or parameters are set the function initializes the application. See the code below

var ldr:Loader = new Loader();
ldr.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, progressEventListener);
ldr.contentLoaderInfo.addEventListener(Event.COMPLETE, completeListener);
ldr.contentLoaderInfo.addEventListener(Event.INIT, initListener );

var req:URLRequest = new URLRequest( mainPath );
ldr.load( req );

function initListener( e:Event ):void
{
	if( root.loaderInfo.parameters.swfBasePath != null )
	{
		Object( ldr.content ).setSWFObjectValues( swfParams );
	}else{
		Object( ldr.content ).setLocalValues( );
	}
}

I really would like to discuss if this is a proper solution