5

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

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

相关细节:

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

4 回答 4

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()" />

于 2009-01-15T17:40:05.937 回答
1

原因很简单。我今天发现了这一点。

在通过SWFloader具有parentApplicationAplication.application设置为顶级应用程序加载的组件中(此女巫通过 SWFLoader 加载组件)。并且加载的组件可以看到flashvars设置为顶级应用程序。这可能是设置参数SWFLoader没有任何影响的原因。

我已经在我的顶级应用程序上设置了正确的 flashvars,它们也可以在加载的应用程序中看到:-)。

于 2010-11-24T12:37:04.197 回答
0

在网页上嵌入 SWF 时,您可以将 flashvars 作为 URL 上的参数传递给 SWF,也许同样适用于您的情况?如果 SWF 位于file:///some/path/to/a.swf尝试使用file:///some/path/to/a.swf?hello=world&foo=bar. 它可能会起作用。

于 2009-01-03T10:25:53.097 回答
0

如果我首先找到这个答案,今天会为自己节省很多时间:AS3 Pass FlashVars to loaded swf

本质上:从 Flash Player 10.2 开始,可以通过将 flashvars 设置为 LoaderContext 上的参数来传递它们。

于 2015-06-13T01:28:34.490 回答