是否可以加载ActionScript 3 SWF并与之交互,例如通过替换其某些功能或编辑变量?类似于在.NET中使用反射和代码生成的方式。
我希望在现有的第三方AS3应用程序上添加额外的功能层。
答案 0 :(得分:7)
如果要将其加载到另一个AS3 SWF,是的,您可以访问加载的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(而不是将其复制到您的域并从那里加载),following rule适用
Security.allowInsecureDomain()
方法。简而言之,除非SWF创建者明确允许从您的域中修改它,否则您无法通过远程加载来修改它。如果您可以将SWF复制到您的域中,则不适用。
答案 1 :(得分:0)
嗯,你可以通过挖掘对象的层次结构来控制公开可用的东西(剪辑和其他swf组件),这只是基本的东西。另一种选择是你可以在运行时反编译加载的swf。这个library听起来非常有趣。
答案 2 :(得分:0)
Aspose.Flash可以帮助你编辑变量,因为它支持动作脚本字节代码反编译,但是它不是免费的,除非你使用外部as3编译器(例如来自Adobe的免费编译器),否则无法发出新函数和开源)