加载和修改AS3 SWF

1 reflection flash actionscript-3

是否可以加载ActionScript 3 SWF并与之交互,例如通过替换其某些功能或编辑变量?类似于.NET使用反射和代码生成的可能性.

我希望在现有的第三方AS3应用程序上添加额外的功能层.

Ama*_*osh 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);
}
Run Code Online (Sandbox Code Playgroud)

如果您从其他域加载第三方SWF(而不是将其复制到您的域并从那里加载),则以下规则适用

  • 如果加载的内容是使用ActionScript 3.0编写的SWF文件,除非该跨脚本安排是通过对一个呼叫批准它不能跨脚本由另一个安全沙箱的SWF文件的Security.allowDomain()Security.allowInsecureDomain()在该方法中加载的内容文件.

简而言之,除非SWF创建者明确允许从您的域中修改它,否则您无法通过远程加载来修改它.如果您可以将SWF复制到您的域,则不适用.