3

私は、JavaScriptライブラリを使用してWebサービスを使用し、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 アプローチに少し似ているように聞こえますが、Javascript 構文のメソッドを何らかの方法で C# から呼び出すことができるかどうかを調べることに興味があります。

これについて何か助けていただければ幸いです。

ありがとう。

4

1 に答える 1

1

.NET 用の JavaScript インタープリターであるJintを使用することもできます。Jint を使用すると、JavaScript コードをフィードして解釈するだけでなく、.NET コードから直接 JS メソッドを呼び出すこともできます。

ジントのウェブサイトから:

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 に答える