我一直在使用带有javascript库的webservice,并通过ExternalInterface来自C#到Javascript来回访问web服务,反之亦然。我不想再这样做了,差不多完成了用C#重写库。大部分工作正常。
不幸的是,javascript中有一系列(静态)方法,我发现它非常非常难以在C#中复制。具有此类运算符的方法,例如:
static LongEmul dCb (LongEmul b) {
var c = ~b.l + 1 & 4194303;
var d = ~b.m + (c == 0 ? 1 : 0) & 4194303;
var e = ~b.h + (c == 0 && d == 0 ? 1 : 0) & 1048575;
return tBb(c, d, e);
}
这是我尝试重构javascript:不是很好。如何在启动时创建某种DOM或Javascript解析器对象,将javascript方法或完整类写入此对象,然后使用c#中的参数调用对象中的方法并返回返回值。我知道这听起来有点像我正在替换的ExternalInterface方法,但我很想知道是否可以以任何方式从C#调用Javascript语法中的方法。
我很感激任何帮助。
感谢。
答案 0 :(得分:1)
您可能希望使用Jint,一个.NET的JavaScript解释器。 Jint允许您使用一些JavaScript代码提供它,而不仅仅是解释它,甚至允许您直接从.NET代码调用JS方法。
来自Jint网站:
script= @"
function square(x) {
return x * x;
};
return square(number);
";
var result = new JintEngine()
.SetParameter("number", 3)
.Run(script));
Assert.AreEqual(9, result);
调用特定的JS方法(来自docs):
JintEngine jint = new JintEngine();
jint .Run(@"
var f = function (x, y) {
return x * y;
}
";
Console.WriteLine(jint.CallFunction("f", 2, 3)); // Displays 6