3

我一直在使用带有 javascript 库的 web 服务,并通过从 C# 到 Javascript 来回调用 ExternalInterface 访问 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 语法中的方法。

对于这方面的任何帮助,我将不胜感激。

谢谢。

4

1 回答 1

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
于 2012-11-23T23:21:32.070 回答