Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flash 加载并修改AS3 SWF_Flash_Actionscript 3_Reflection - Fatal编程技术网

Flash 加载并修改AS3 SWF

Flash 加载并修改AS3 SWF,flash,actionscript-3,reflection,Flash,Actionscript 3,Reflection,是否可以加载ActionScript 3 SWF并与之交互,例如通过替换其某些函数或编辑变量?与在.NET中使用反射和代码生成类似 我希望在现有的第三方AS3应用程序上添加一层额外的功能。如果您正在将其加载到另一个AS3 SWF,是的,您可以访问加载的SWF的公共属性。您不能替换函数-您可以调用函数,即公共函数 var ldr:Loader = new Loader(); ldr.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoad)

是否可以加载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);
}
如果您正在从另一个域加载第三方SWF(而不是将其复制到您的域并从那里加载),则应用

  • 如果加载的内容是使用ActionScript 3.0编写的SWF文件,则不能由另一个安全沙箱中的SWF文件对其进行交叉脚本编写,除非通过调用加载的内容文件中的或
    security.allownSecureDomain()
    方法批准该交叉脚本编写安排

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

如果您正在将其加载到另一个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(而不是将其复制到您的域并从那里加载),则应用

  • 如果加载的内容是使用ActionScript 3.0编写的SWF文件,则不能由另一个安全沙箱中的SWF文件对其进行交叉脚本编写,除非通过调用加载的内容文件中的或
    security.allownSecureDomain()
    方法批准该交叉脚本编写安排

简而言之,这意味着除非SWF创建者明确允许从您的域修改它,否则您不能通过远程加载来修改它。如果你可以将SWF复制到你的域中,这就不适用了。

好吧,你可以通过挖掘对象的层次结构来控制公开可用的东西(剪辑和其他SWF组件),只是一些基本的东西。另一个选择是可以在运行时反编译加载的swf。对于这项任务来说,这听起来很有趣。

好吧,你可以通过挖掘对象的层次结构来控制公开可用的东西(剪辑和其他swf组件),只是一些基本的东西。另一个选择是可以在运行时反编译加载的swf。对于该任务来说,这听起来很有趣。

Aspose.Flash可以帮助您编辑变量,因为它支持操作脚本字节码反编译,但是它不是免费的,除非您使用外部as3编译器(例如,来自Adobe的免费开源编译器)Aspose.Flash可以帮助您编辑变量,因为它支持操作脚本字节码反编译,但是它不是免费的,除非您使用外部as3编译器(例如,来自Adobe的免费开源编译器),否则无法生成新函数