1 reflection flash actionscript-3
是否可以加载ActionScript 3 SWF并与之交互,例如通过替换其某些功能或编辑变量?类似于.NET使用反射和代码生成的可能性.
我希望在现有的第三方AS3应用程序上添加额外的功能层.
如果要将其加载到另一个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(而不是将其复制到您的域并从那里加载),则以下规则适用
Security.allowInsecureDomain()在该方法中加载的内容文件.简而言之,除非SWF创建者明确允许从您的域中修改它,否则您无法通过远程加载来修改它.如果您可以将SWF复制到您的域,则不适用.