2

我正在寻找以下 JavaScript 代码的 AS3 等效项:

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 函数的回调,作为参数提供服务器的响应。

因此,它不使用复杂的严格 JSON 协议(在属性名称周围加上引号,不需要这样的引号是有效的 Object-Literal,等等其他一些微小的差异在 AS3 中仍然是有效的 Object-Literal) ,并且服务器已经实现了 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 中执行此操作的方法是什么?

4

2 回答 2

3

我看到有两种解决方案:

首先是在运行时使用您需要的脚本创建新的 swf 文件并将其加载到Loader.loadBytes().

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

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

UPD:evalAS3 - D.eval的另一个库 AS2 模拟。

于 2013-02-21T12:49:37.190 回答
1

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

您可能必须为 flash 版本制作另一个 API,或者以某种方式插入外部 javascript 引擎。

于 2013-02-21T12:11:05.463 回答