将flashvars样式的参数传递给加载的SWF

时间:2009-01-02 19:52:21

标签: flex flash actionscript-3 swfloader flashvars

我有一个Flex 3应用程序(播放器v9)加载Flash SWF(AS3,也是播放器v9),需要动态传递一组在运行时已知的参数。这些参数通常通过HTML页面中的flashvars元素传递。嵌入式影片通过loaderInfo.parameters对象访问这些参数。

我尝试使用SWFLoaderLoader类,但在传递参数方面没有成功。

相关细节:

  • 这是一个本地程序,不能依赖查询字符串参数。
  • 我已经从嵌入代码中设置了loaderInfo.parameters["foo"] = "123",但参数似乎永远不会出现在嵌入式电影中。
  • 我不能在嵌入式电影中放置额外的参数传递机制,因为它们是由第三方创建的。

4 个答案:

答案 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加载的组件中,parentApplicationAplication.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。