C# 调用JavaScript脚本并进行对象交互(ReoScript)
C# 调用JavaScript脚本并进行交互首先在Github下载ReoScript源码,并进行编译,引用相关的dllReoScriptclass Program{static ScriptRunningMachine srm = new ScriptRunningMachine();static void Main(string[] args){srm.WorkMode |= MachineWo
·
C# 调用JavaScript脚本并进行交互
首先在Github下载ReoScript源码,并进行编译,引用相关的dll
ReoScript
class Program
{
static ScriptRunningMachine srm = new ScriptRunningMachine();
static void Main(string[] args)
{
srm.WorkMode |= MachineWorkMode.AllowDirectAccess;
Case acCase = new Case()
{
CaseVariables = new List<Variable>()
{
new Variable("a", 123),
new Variable("b", false),
new Variable("c", "STR"),
}
};
// 注入
InjectIntProperty(acCase.CaseVariables[0].VariableName, acCase.CaseVariables[0]);
InjectIntProperty(acCase.CaseVariables[1].VariableName, acCase.CaseVariables[1]);
InjectIntProperty(acCase.CaseVariables[2].VariableName, acCase.CaseVariables[2]);
string script = @"a = 222; b = true; c = 'str'";
srm.Run(script);
Console.WriteLine(acCase.CaseVariables[0].VariableValue);
Console.WriteLine(acCase.CaseVariables[1].VariableValue);
Console.WriteLine(acCase.CaseVariables[2].VariableValue);
}
static void InjectIntProperty(string name, Variable obj)
{
if (obj.VariableValue.GetType().Name == "Int32")
{
srm.SetGlobalVariable(name, new ExternalProperty(
() => { return obj.VariableValue; },
(v) => { obj.VariableValue = ScriptRunningMachine.GetIntValue(v); }
));
}
else if (obj.VariableValue.GetType().Name == "Boolean")
{
srm.SetGlobalVariable(name, new ExternalProperty(
() => { return obj.VariableValue; },
(v) => { obj.VariableValue = ScriptRunningMachine.GetBoolValue(v); }
));
}
else if (obj.VariableValue.GetType().Name == "String")
{
srm.SetGlobalVariable(name, new ExternalProperty(
() => { return obj.VariableValue; },
(v) => { obj.VariableValue = ScriptRunningMachine.ConvertToString(v); }
));
}
}
}
public class Case
{
public IList Elements { get; set; }
public List<Variable> CaseVariables { get; set; }
}
public class Variable
{
public Variable(string name, object value)
{
VariableName = name;
VariableValue = value;
}
public string VariableName { get; set; }
public object VariableValue { get; set; }
}
*输出结果为 :
*
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
已为社区贡献2条内容
所有评论(0)