Загрузите и измените AS3 SWF - PullRequest
1 голос
/ 03 декабря 2009

Можно ли загрузить SWF-файл ActionScript 3 и взаимодействовать с ним, например, путем замены некоторых его функций или редактирования переменных? Подобно тому, как это возможно в .NET с использованием отражения и генерации кода.

Я хочу добавить дополнительный уровень функциональности поверх существующего стороннего приложения AS3.

Ответы [ 3 ]

7 голосов
/ 03 декабря 2009

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

var ldr:Loader = new Loader();
ldr.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoad);
ldr.load(new URLRequest("filename.swf"));
private function onLoad(e:Event):void
{
    var swf:Object = LoaderInfo(e.target).content;
    swf.somePublicVar = newValue;
    swf.somePublicObject.publicMethod();
    swf.getChildAt(0).x = 30;
    //assuming there is a sprite at index 1
    var child:Sprite = Sprite(swf.getChildAt(1));
    child.graphics.lineStyle(1);
    child.graphics.drawCircle(10, 10, 10);
}

Если вы загружаете сторонний SWF-файл из другого домена (вместо того, чтобы копировать его в свой домен и загружать его оттуда), применяется правило

  • Если загруженный контент представляет собой SWF-файл, написанный с использованием ActionScript 3.0, он не может быть подвергнут перекрестному сценарию с помощью SWF-файла в другой изолированной программной среде безопасности, если только это соглашение не было одобрено путем вызова Security.allowDomain ) или метод Security.allowInsecureDomain() в загруженном файле содержимого.

Что вкратце означает, что, если создатель SWF явно не разрешил изменять его из вашего домена, вы не сможете изменить его, загрузив его удаленно. Это не применяется, если вы можете скопировать SWF на свой домен.

0 голосов
/ 08 декабря 2009

Aspose.Flash может помочь вам с редактированием переменных, так как он поддерживает декомпиляцию байт-кода сценария действия, однако он не бесплатен и не может генерировать новые функции, если вы не используете внешний компилятор as3 (например, тот, который от Adobe бесплатный и с открытым исходным кодом)

0 голосов
/ 03 декабря 2009

Ну, вы могли бы контролировать вещи (клипы и другие SWF-компоненты), которые являются общедоступными, копаясь в иерархии объектов, просто базовые вещи. Другой вариант - вы можете декомпилировать загруженный SWF во время выполнения. Эта библиотека звучит довольно интересно для этой задачи.

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