Передача параметров в стиле flashvars в загруженный SWF - PullRequest
4 голосов
/ 02 января 2009

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

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

Соответствующие данные:

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

Ответы [ 4 ]

9 голосов
/ 15 января 2009

Передача этих параметров в 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()" />

1 голос
/ 24 ноября 2010

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

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

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

0 голосов
/ 13 июня 2015

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

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

0 голосов
/ 03 января 2009

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

...