Posted Thursday, 10 September 2009 at 11:47 by Andrew Liu
Tagged: web applications | web development
Read more blogs...
More and more flash components are appearing on the web, and I came across this small issue which I thought would be good to share with everyone. A client gave me a flash file to upload to their website, which sounded simple enough. But it ended up being a series of flash, with the flash SWF file simply being the "container" for everything. I know flash is now becomien more dynamic, and nowadays it is quite flexible so you can load files, or even blobs of text, from external files, and insert them into the flash at specific locations.
However, when embedding a flash file from another directory, the absolute and relative paths of these additional files becomes confusing. Most of the time, the flash developer builds the files so that they are relative from the flash SWF file. Sounds correct, at the time of development. But when you embed the flash SWF file, it is unlikely that the file itself resides in the current directory. Lets say we are embedding a flash SWF on our home page "/index.html". Normally, you would embed the flash file from a specific target directory, say "/flash/home1/myflash.swf". In doing so, the SWF file now looks for its external components relative to "/", which is where the "/index.html" file is located, as this is the original file. Of course, our external images and text which are relevant to "/flash/home1/myflash.swf" are actually located in "/flash/home1/images.xml", and "/flash/home1/images/image1.jpg", etc. But when loaded from "index.html" the flash SWF file looks for "/images.xml" and "/images/image1.jpg" instead!
To make the embedded flash file look in the correct directory, we need to tell it its BASE path.
We can do this a number of ways:
- in the object tag: <param name="base" value="/flash/home1/" />
- in the embed tag by adding the following attribute: base="/flash/home1/"
- with SWFObject by adding the script line: so.addParam("base", "/flash/home1/");
- using Flashnode: set base parameter in "Advanced flash node options"
Hope this helps out!