执行存储为字符串的JScript代码并传递参数

时间:2014-12-02 13:14:02

标签: eval jscript wsh

所以我看过Execute JavaScript code stored as a string并看了这个简单的answer

我的问题是,如果存储在字符串中的JScript代码需要参数,该怎么办?我怎么通过呢?

首先尝试:

var jsStr = "WScript.Echo(WScript.Arguments[0]);";
eval(jsStr);

第二次尝试:

var F = new Function(jsStr);
F.call(this,'test str');

但这次可怜的尝试失败了。

注意:

我们假设我无法控制jsStr值。所以基本上,目前重新格式化它是不可能的。

1 个答案:

答案 0 :(得分:2)

问题是由[]引起的。 WScript.Arguments是一个对象(由脚本宿主运行时提供),但不是数组。要访问其元素,您必须使用(),即调用其Item()函数。证据:

var jsStr;
jsStr = "WScript.Echo('a', WScript.Arguments(0));"; eval(jsStr);
jsStr = "WScript.Echo('b', WScript.Arguments.Item(0));"; eval(jsStr);

var expr;
expr = "typeof WScript.Arguments"; WScript.Echo(0, expr, eval(expr));
expr = "typeof WScript.Arguments(0)"; WScript.Echo(1, expr, eval(expr));
expr = "typeof WScript.Arguments[0]"; WScript.Echo(2, expr, eval(expr));

输出:

cscript 27250366.js pipapo
a pipapo
b pipapo
0 typeof WScript.Arguments object
1 typeof WScript.Arguments(0) string
2 typeof WScript.Arguments[0] undefined