检测功能的来电者的ScriptEngine

时间:2013-08-28 15:49:16

标签: asp-classic vbscript jscript

我正在尝试根据调用者的ScriptEngine确定函数的结果:

//JScript
function doSomething()
{
    if (ScriptEngine() === "VBScript")
        return "this is VBScript";
    else
        return "this is JScript";
}

但结果是:

//JScript
var str = doSomething(); //"this is JScript"

//VBScript
Dim str : str = DoSomething() '"this is JScript"

ScriptEngine()函数始终返回其调用者的引擎名称,但我想知道doSomething()调用者的引擎名称(不将其作为参数传递)。在ASP中有没有办法做到这一点?

这背后的动机是我写了一个在ASP站点中使用的JSON实用程序类。解析JSON字符串是通过eval完成的(使用我在this回答中找到的验证)。

eval的结果是一个JScript对象(JScript数组和JScript日期作为属性)。然后,用户必须指定一个标志来告诉函数他是否需要纯JScript对象,或者他是否想要一个VBScript对象(将数组和日期转换为其VBScript等效项)。我想消除那个参数。

//JScript
function parseJson(jsonString, isJsObject)
{
    var parsedObject = parsingLogic(jsonString);

    if (!isJsObject) //Would like to replace by engine check
        convertVbProperties(parsedObject);

    return parsedObject;
}

1 个答案:

答案 0 :(得分:0)

我最终保留了isJsObject参数。由于我们大部分时间都在使用VBScript,而JScript只用于构建库,因此工作正常。