我有一个Flex 3应用程序(播放器v9)加载Flash SWF(AS3,也是播放器v9),需要动态传递一组在运行时已知的参数。这些参数通常通过HTML页面中的flashvars
元素传递。嵌入式影片通过loaderInfo.parameters
对象访问这些参数。
我尝试使用SWFLoader
和Loader
类,但在传递参数方面没有成功。
相关细节:
loaderInfo.parameters["foo"] = "123"
,但参数似乎永远不会出现在嵌入式电影中。答案 0 :(得分:9)
在URL中传递此参数无效,因为它们是使用html-wrapper中的javascript代码进行的。 'flashVars'参数是使用Application.application.parameters获取的,因此,您必须手动设置这些参数。
如果您使用SWFLoader加载另一个应用程序,您应该创建该对象,该对象将代表加载的应用程序并应用您所需的全部内容:
<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()" />
答案 1 :(得分:1)
原因很简单。 我今天发现了这个。
在通过SWFloader
加载的组件中,parentApplication
或Aplication.application
设置为顶级应用程序(这会通过SWFLoader加载组件)。
加载的组件可以看到flashvars
设置为顶级应用程序。
这可能是SWFLoader
中设置参数没有任何影响的原因。
我已经在我的顶层应用程序上设置了正确的flashvars,它们也可以在加载的应用程序中看到: - )。
答案 2 :(得分:0)
在网页上嵌入SWF时,您可以将flashvars作为参数传递给SWF的URL,或许在您的情况下也可以这样做?如果SWF位于file:///some/path/to/a.swf
,请尝试使用file:///some/path/to/a.swf?hello=world&foo=bar
。它可能会奏效。
答案 3 :(得分:0)
如果我先找到这个答案,我今天会节省很多时间:AS3 Pass FlashVars to loaded swf。
基本上:从Flash Player 10.2开始,可以通过在FlashaderContext上将它们设置为参数来传递flashvars。