Передача параметров в стиле flashvars в загруженный SWF

У меня есть приложение Flex 3 (player v9), которое загружает Flash SWF (AS3, также player v9) и должно динамически передавать ему набор параметров, которые известны во время выполнения. Это параметры, которые обычно передаются через элемент flashvars на странице HTML. Встроенный фильм получает доступ к этим параметрам через объект loaderInfo.parameters.

Я пробовал использовать классы SWFLoader и Loader безуспешно при передаче параметров.

Соответствующие подробности:

  • Это локальная программа, которая не может полагаться на параметры строки запроса.
  • Я испортил установку loaderInfo.parameters["foo"] = "123" из кода внедрения, но этот параметр, кажется, никогда не попадает во встроенный фильм.
  • Я не могу разместить дополнительные механизмы передачи параметров во встроенных фильмах, поскольку они созданы третьими сторонами.

person David Grant    schedule 02.01.2009    source источник


Ответы (4)


Передача этих параметров в URL не поможет, потому что они взяты с использованием кода javascript в html-оболочке. Параметры 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()" />

person aleksk    schedule 15.01.2009
comment
Это хорошая общая идея. Если вы хотите быть более строгим, вы можете определить интерфейс для загруженного SWF и использовать его для передачи в него строго типизированных параметров. - person davr; 18.07.2009

Причина проста. Я обнаружил это сегодня.

В компоненте, загруженном через SWFloader, parentApplication или Aplication.application установлено на приложение верхнего уровня (эта ведьма загружает компонент через SWFLoader). И загруженный компонент может видеть flashvars установленным на приложение верхнего уровня. Вероятно, это причина того, что установка параметров в SWFLoader не оказывает никакого влияния.

Я установил правильные flashvars в моем приложении верхнего уровня, и они также видны в загруженном :-).

person Kamil Sobol    schedule 24.11.2010

При встраивании SWF на веб-страницу вы можете передавать flashvars в качестве параметров в URL-адресе SWF, возможно, то же самое может сработать в вашем случае? Если SWF-файл находится в file:///some/path/to/a.swf, попробуйте использовать file:///some/path/to/a.swf?hello=world&foo=bar. Это может сработать.

person Theo    schedule 03.01.2009
comment
Боюсь, это не сработает. Это могло бы сработать, если бы основной SWF-файл находился в браузере, но он работает прямо из Flash Player. - person David Grant; 05.01.2009

Сегодня я сэкономил бы много времени, если бы нашел сначала этот ответ: AS3 Pass FlashVars в загруженный swf.

По сути: начиная с Flash Player 10.2 появилась возможность передавать flashvars, задав их как параметры в LoaderContext.

person xeno.be    schedule 13.06.2015