【问题标题】:Access javascript methods in C# Form (without Webbrowser or DOM)以 C# 形式访问 javascript 方法(无需 Webbrowser 或 DOM)
【发布时间】:2012-11-23 22:33:57
【问题描述】:

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

如果能提供任何帮助,我将不胜感激。

谢谢。

【问题讨论】:

标签: c# javascript parsing


【解决方案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

【讨论】:

  • 无法告诉你出了什么问题,尤其是因为我不知道你在解析什么。我建议您在解决方案中包含 Jint(作为源代码)并检查异常发生的位置和原因。
猜你喜欢
  • 2021-02-02
  • 2012-10-08
  • 1970-01-01
  • 2017-07-18
  • 2020-07-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多