在C#Form中访问javascript方法(没有Webbrowser或DOM)

时间:2012-11-23 22:33:57

标签: c# javascript parsing

我一直在使用带有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语法中的方法。

我很感激任何帮助。

感谢。

1 个答案:

答案 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