2013-02-21 54 views
2

我期待的AS3相当于下面的JavaScript代码:的ActionScript 3 - 构建功能动态

var funcName = "foo();" 
var fHandler = new Function("a",funcName + "return a + 1"); 

fHandler // now equals a function like function(a){ foo(); return a + 1 } 

好吧,这是一个非常简单的例子

大局观: 我有一台服务器适用于JavaScript客户端。这个服务器给出的每个响应都是对JavaScript函数的回调,提供服务器响应的参数。

因此,它不使用combbersome严格的JSON协议(引用属性名称时不需要这种引用是有效的Object-Literal等等一些其他小的差异,这些差异仍然是有效的Object-在AS3中是文字),并且服务器已经实现了100多个API。

但是,现在需要为移动设备生成Air客户端。

如果我能做到以下事情 - 那将会很棒。 它是有效的EMCA脚本,但没有通过对AS3

public function responseFromServer(String:s){ 
    s = chopCallbackWrap(s); //strips the 'myCallback(' and ')' parts 
    //s is now always a string describing a valid Object-Literals not necessarily JSON 
    return new Function("", " return " + s)(); 
} 

另一个方面是从服务器

什么是做在AS3的方式分布在飞行的通用客户端algorythms处理?

回答

3

解决办法有两个我看到:

首先与你需要的脚本运行时创建新的SWF文件并将其加载到Loader.loadBytes()

我建议你检查这个库as3abc,as3swfas3commons。我没有经验,但他们都可以在运行时创建和发布swf(可能其中一些不支持发布的swf中的脚本,因此这是实验的任务)。

第二个是通过ExternalInterface执行你的JS并使用as3中的结果。

UPD:多个库AS2 eval模拟AS3 - D.eval

+0

感谢您的信息 - 这是伟大的。它可以用于第一种情况 - 我们会研究它。至于其他 - 在iPhone空气汇编中加载更多的SWF将不会暴露它的功能,但只有图形(或我做错了什么?) – 2013-02-21 18:01:02

+0

是的,它不会在iOS下工作,因为iOS [限制](http: //help.adobe.com/en_US/as3/dev/WS5b3ccc516d4fbf351e63e3d118a9b90204-7e13.html#WS2f73111e7a180bd0-3db1ea4613c45877121-8000)。 – fsbmain 2013-02-22 06:52:04

1

在AS3(或2)中这是不可能的,因为在运行时没有内置脚本编译器(意味着AS3程序内没有对AS3代码的动态解释)。也没有eval函数(或者说,它不会执行JavaScript eval所做的)。

您可能需要为Flash版本创建另一个API,或者以某种方式插入外部JavaScript引擎。