AS3: добавить прослушиватель событий в загруженный SWF - PullRequest
1 голос
/ 04 октября 2009

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

public function loadGame(gameSrc:String,gX:Number,gY:Number):void {
    var loader = new Loader();
    var addedDefinitions:LoaderContext = new LoaderContext();
    addedDefinitions.applicationDomain = new ApplicationDomain();   
    loader.load(new URLRequest(gameSrc));
    loader.contentLoaderInfo.addEventListener(Event.COMPLETE,onLoaded);

function onLoaded(evt:Event):void {   
    var game:MovieClip = MovieClip(evt.target.content);

    game.x = gX;
    game.y = gY;    

    chamber.mc_gameHolder.addChild(game);    
    Tweener.addTween(chamber.mc_gameTitle,{alpha:1,time:.75});  

    game.addEventListener("showQuiz",showQuiz);  
}

}

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

Кто-нибудь? И извинения, если это было опубликовано ранее - поиск не дал ничего конкретного.

Ответы [ 7 ]

2 голосов
/ 30 октября 2009

Я столкнулся с той же проблемой. Вот что вам нужно сделать. При создании экземпляра вашего LoaderContext убедитесь, что LoaderContext использует SecurityDomain.currentDomain. Это решит вашу проблему.

1 голос
/ 05 октября 2009

Это будет работать только в том случае, если оба SWF-файла имеют значение AVM2Movie (созданное с использованием AS3), что, как я полагаю, имеет место в этом случае, поскольку в противном случае приведение к MovieClip привело бы к ошибке во время выполнения.

Вы уверены, что событие отправляется классом документа загруженного SWF, а не одним из его дочерних элементов? Потому что вы вызываете addEventListener на game, который является классом документа (корнем) загруженного SWF, и он не будет перехватывать события, отправленные его дочерними элементами. Можете ли вы показать код, где вы отправили событие?

0 голосов
/ 25 января 2013

Вы должны рассмотреть некоторые вещи в вашей ситуации.

(1) если вы загружаете код из ТОГО ЖЕ домена, домен приложения не требуется.

(2) если вы загружаете код из разных доменов, сначала проверьте файл политики [crossdomain.xml] ... второй ... если вы не хотите тратить время на исправление этого ... используйте PHP и сверните файл в свой домен ... затем загрузите его (Flash подумает, что загружает его из того же домена).

0 голосов
/ 19 января 2012

Создайте LoaderContext, который устанавливает ApplicationDomain на текущий домен, затем передайте его с помощью вызова load ():

loader = new Loader();
loader.contentLoaderInfo.addEventListener( Event.COMPLETE, handleLoaded );
var loaderContext:LoaderContext = new LoaderContext(false, new ApplicationDomain( ApplicationDomain.currentDomain ) );
loader.load( new URLRequest("yoMama.swf"), loaderContext );

Вы можете подтвердить, что у вас нет междоменной проблемы, если загрузочный SWF-файл отслеживает вызов var или функции из загруженного SWF-файла. Если вы получите ожидаемый результат, crossdomain.xml не является вашей проблемой.

0 голосов
/ 17 января 2012

Что нужно учитывать:

  • Загруженный клип должен быть из домена с включенной безопасностью. Если это не тот домен, в котором находится загрузочная флэш-память, ее следует включить в файл crossdomain.xml . И загружен тоже.
  • Ручная настройка «allowDomain» через Security.allowDomain к домену загруженного клипа никогда не бывает плохой.
  • Событие должно быть пузырящимся, так как Flash может добавить слой или два контейнера между «игровым» var и фактическим содержимым.
  • И загруженные, и загруженные клипы ДОЛЖНЫ быть AS3.
  • Возможно, целевой клип пытается загрузить вещи из своего собственного надлежащего местоположения, поэтому, когда вы загружаете его по другому URL-адресу, он не может найти файлы и завершается ошибкой, никогда не достигая фазы запуска событий первое место.
0 голосов
/ 09 октября 2009

хм, не должно ли быть:

addedDefintions.applicationDomain = ApplicationDomain.currentDomain, чтобы разрешить загруженному видео «доступ» к родительскому видео?

Также для целей тестирования я предлагаю bubble событие, чтобы вы не пропустили экранный объект между ними.

0 голосов
/ 09 октября 2009

Возможно, что событие отправляется до события Event.COMPLETE. Попробуйте добавить прослушиватель для события Event.INIT. Событие Event.INIT отправляется, когда Loader впервые получает доступ к объекту документа загруженного SWF.

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