javascript - 从 C# 执行 JS 代码时出现异常 : Function expected

标签 javascript c# string-parsing comparison-operators

我的 C# 代码中将此 javascript 表达式代码作为字符串,我需要使用 Microsoft.JScript.Eval.JScriptEvaluate (c#) 对其进行评估(执行)并获取结果。

string code = @"var roles=[];
roles.push('LOC_IND');
roles.push('MANAGERL3');
var country='CANADA';
var age=80;
eval(""roles.indexOf('Administrator')>=0||roles.indexOf('LOC_IND')>=0&&country=='CANADA'"")";

// Calling JScript.Eval to execute that code
var engine = Microsoft.JScript.Vsa.VsaEngine.CreateEngine();
var result = Microsoft.JScript.Eval.JScriptEvaluate(code, engine);

如果您在浏览器控制台中执行 JavaScript 代码,它本身工作正常,并按预期返回“true”:

var roles=[];
roles.push('LOC_IND');
roles.push('MANAGERL3');
var country='CANADA';
var age=80;
eval("roles.indexOf('Administrator')>=0||roles.indexOf('LOC_IND')>=0&&country=='CANADA'")

但是,当我从 C# Eval.JScriptEvaluate(code, engine); 调用它时我得到这个异常:

Function expected.

我不确定它需要什么功能以及我需要做什么来解决这个问题? 最后 Eval.JScriptEvaluate(code, engine) 必须返回 true。

最佳答案

首先,您不需要调用 eval。
其次,您应该将代码包装在自调用函数中,因为您期望得到一个结果。
第三,看起来Microsoft JScript不支持JavaScript的Array.prototype的部分或全部方法,因此您不能使用indexOf()。 试试这个代码:

string code = @"
function hasRole(roles,role){
    for(var i=0;i<roles.length;i++)
        if(roles[i]==role)return true;
    return false;
};
(function(){
    var roles=[],country='CANADA',age=80;
    roles.push('LOC_IND');
    roles.push('MANAGERL3');
    return hasRole(roles,'Administrator')||hasRole(roles,'LOC_IND')&&country=='CANADA';
})();";


附带说明一下,您的返回语句中似乎缺少一对括号。

关于javascript - 从 C# 执行 JS 代码时出现异常 : Function expected,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27843327/

相关文章:

javascript - 通过 Javascript 设置表单字段值时的安全注意事项?

javascript - 我无法让 .addClass 在 IE11 中工作

javascript - 将图像从视频 JS 保存到 Canvas

c# - 调用线程无法访问此对象,因为另一个线程拥有它

python - 在 css 文件中查找类并用 python 将它们写入新文件中

javascript - 将元素 ID 添加到 js if 语句

c# - 如何读取WebClient的自定义 header 条目

c# - SQL - ASP.NET Core 2.1.7 中的故意注入(inject)

string - 为什么我来自BufReader::lines的行不匹配?

powershell - 格式表的标记字符串