AS3: функция доступа во внешнем классе, расположенная во внешнем SWF - PullRequest
1 голос
/ 23 октября 2011

Я пытаюсь получить доступ к функции в загруженном SWF-файле, имеющем внешний класс.

Это то, что я пробовал до сих пор, и это не игра в кости:

 private function startLoad(){
        var loader:Loader = new Loader();
        var req:URLRequest = new URLRequest("one.swf");
        loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoadComplete);
        loader.load(req);

    }
 private function onLoadComplete(e:Event):void{
        var ClassDefinition:Class = e.target.applicationDomain.getDefinition("com.view.Creative") as Class;
        var butn:MovieClip = new ClassDefinition(0,0);////0,0 is x and y cordinates I have in the "com.view.Creative" class

        this.addChild(butn);
        butn.setVar("one");////"setVar" is the function in my external swf with the class "com.view.Creative"
    }

Это функция в com.view.Creative.as

  public var storedVar:String

  public function setVar(str:String):void{
               this.storedVar = str;
               trace(storedVar)
    }

// Возвращает "ReferenceError: Ошибка # 1069: свойство setVar не найдено в com.view.Creative и значение по умолчанию отсутствует."

Это другой подход, который я использовал безуспешно

  private function startLoad(){
        var appDomain:ApplicationDomain = new ApplicationDomain();
        var context:LoaderContext = new LoaderContext(false, appDomain);
        var loader:Loader = new Loader();
        loader.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler); 
        loader.load(new URLRequest("one.swf"), context);


    }

  private function completeHandler(event:Event):void { 
        var myGreet:Class = ApplicationDomain.currentDomain.getDefinition("com.view.Creative") as Class;                
        var app : MovieClip = new myGreet(0,0)
        addChild(app);
        app.setVar("one");////set var is the function in my external swf with the class "com.view.Creative" I am trying to access
        //event.target.content.setVar("one");///this works if I am placing my "setVar" function on my "Main" Doc Class which I am trying to avoid///

    }

Это функция в com.view.Creative.as

   public var storedVar:String

   public function setVar(str:String):void{
               this.storedVar = str;
               trace(storedVar)
    }

// Возвращает "ReferenceError: Ошибка # 1069: свойство setVar не найдено в com.view.Creative и отсутствует значение по умолчанию.at com.util :: ClickArea / completeHandler () "

Для этого должно быть решение ..... Спасибо заранее!

1 Ответ

1 голос
/ 23 октября 2011

во втором случае попробуйте это:

 var myGreet:Class = event.target.applicationDomain.getDefinition("com.view.Creative") as Class;  

event.target is Your contentLoaderInfo.

Если вы загружаете swf в новый ApplicationDomain, вы не можете искать определение в currentDomain.

в первом случае, возможно, у вас уже есть класс Creative под этим псевдонимом, но с другими параметрами, и когда вы загружаете swf в currentDomain, класс: "com.view.Creative" не будет перезаписывать существующий, а будет возвращать класс из основного swf.

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