Passing flashvars-style parameters to a loaded SWF
Solution 1
Passing this params in URL won't help, because they're taken using javascript code in the html-wrapper. The 'flashVars' params are taken using the Application.application.parameters, so, you have to set these params manually in your case.
If you are using SWFLoader to load another app, you should create the object, that will represent the application loaded and apply all you need:
<mx:Script>
<![CDATA[
import mx.managers.SystemManager;
import mx.controls.Alert;
import mx.events.FlexEvent;
private var loadedApp:Application;
private function onLoadComplete(event:Event):void {
var smAppLoaded:SystemManager = SystemManager(event.target.content);
smAppLoaded.addEventListener(FlexEvent.APPLICATION_COMPLETE, onLoadedAppComplete);
}
private function onLoadedAppComplete(event:FlexEvent):void {
try {
loadedApp = Application(event.target.application);
if(!loadedApp) throw new Error();
loadedApp.parameters["param1"] = "value1";
} catch (e:Error) {
Alert.show("Failed to get application loaded.", "Error", Alert.OK);
}
}
private function onLoadError():void {
Alert.show("Failed to load an application.", "Error", Alert.OK);
}
]]>
</mx:Script>
<mx:SWFLoader
width="100%" height="100%"
source="./AppToLoad.swf"
complete="onLoadComplete(event)"
ioError="onLoadError()" securityError="onLoadError()" />
Solution 2
The reason is simple. I've discovered this today.
In the component loaded via SWFloader
has parentApplication
or Aplication.application
set to the top level application (this witch loads component via SWFLoader).
And the loaded component can see flashvars
set to the top level application.
This is probably the cause that setting parameters in SWFLoader
does not have any impact.
I've set proper flashvars on my toplevel application and they are also seen in the loaded one :-).
Related videos on Youtube
David Grant
Creator of many wildly popular Facebook pages: MultiByteToWideChar() mysqldump Boost C++ Libraries Paying Taxes Cholula
Updated on June 04, 2022Comments
-
David Grant about 2 years
I have a Flex 3 app (player v9) which loads a Flash SWF (AS3, also player v9) and needs to dynamically pass it a collection of parameters which are known at run-time. These are parameters that are normally passed via the
flashvars
element in an HTML page. The embedded movie accesses these parameters via theloaderInfo.parameters
object.I've tried using
SWFLoader
andLoader
classes with no success in param-passing.Relevant details:
- It's a local program, and cannot rely on query string parameters.
- I've mucked with setting
loaderInfo.parameters["foo"] = "123"
from the embedding code, but the parameter never seems to wind up in the embedded movie. - I cannot place extra parameter-passing machinery in the embedded movie(s), as they are created by third parties.
-
David Grant over 15 yearsI'm afraid that doesn't work. It might work if the main SWF were in the browser, but this is running right out of Flash Player.
-
davr almost 15 yearsThis is a good general idea. If you want to be more strict about it, you can define an interface for the loaded SWF, and use that to pass strictly-typed parameters into it.