Как автоматически заполнить ввод с помощью JavaScript без flashvars? - PullRequest
0 голосов
/ 09 декабря 2011

У меня есть приложение flex (файл swf). Кто-нибудь знает, как автоматически заполнить flex textInput из JavaScript без использования flashVars? Он должен работать в FireFox и IE.

1 Ответ

1 голос
/ 10 декабря 2011

Вы можете написать wrapper.swf и загрузить в него main.swf.

MyApp.mxml - файл приложения проекта Flex

<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
    xmlns:s="library://ns.adobe.com/flex/spark" 
    xmlns:mx="library://ns.adobe.com/flex/mx">
    <s:HGroup id="hGroup" width="100%" height="100%" 
        horizontalAlign="center" verticalAlign="middle">
        <s:TextInput id="textInput" text=""/>
    </s:HGroup>
</s:Application>

Wrapper.as - файл приложения проекта ActionScript

package
{
import flash.display.Loader;
import flash.display.Sprite;
import flash.events.Event;
import flash.net.URLRequest;
import flash.system.ApplicationDomain;
import flash.system.LoaderContext;

import mx.core.mx_internal;

use namespace mx_internal;

public class Wrapper extends Sprite
{

    private var loader:Loader;

    private var application:Object;

    public function Wrapper()
    {
        loader = new Loader();
        addChild(loader);
        loader.contentLoaderInfo.addEventListener(Event.INIT, loader_initHandler);
        loader.load(new URLRequest("MyApp.swf"), 
            new LoaderContext(false, ApplicationDomain.currentDomain));
    }

    private function loader_initHandler(event:Event):void
    {
        addEventListener(Event.ENTER_FRAME, enterFrameHandler);
    }

    private function enterFrameHandler(event:Event):void
    {
        try
        {
            application = ApplicationDomain.currentDomain.getDefinition(
                "mx.core.FlexGlobals").topLevelApplication;
        }
        catch (error:*)
        {
            return; // app is not ready yet
        }
        if (!application)
            return;

        removeEventListener(Event.ENTER_FRAME, enterFrameHandler);
        if (application.initialized)
            injectText();
        else
            application.addEventListener("creationComplete", application_creationCompleteHandler);
    }

    private function injectText():void
    {
        var textInput:Object = application.getElementAt(0).getElementAt(0);
        if (textInput)
            textInput.text = "Custom value";
    }

    private function application_creationCompleteHandler(event:Event):void
    {
        injectText();
    }

}
}

Result

Наконец, вы можете добавить любую логику в оболочку, включая ExternalInterface.addCallback.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...