Вызов javascript из c # с использованием динамической функции C # 4.0 - PullRequest
1 голос
/ 26 ноября 2010

Можно ли вызвать javascript из c # примерно так?

ScriptRuntime py = Python.CreateRuntime();
dynamic random = py.UseFile("cal.js");
var result =random.Add(1,2);

cal.js


 function Add(a, b) {

        return (a + b);
    }

Ответы [ 2 ]

2 голосов
/ 15 марта 2011

Да, если вы размещаете js в веб-браузере.Для этого вы можете использовать свойства ObjectForScripting и document вместе с видимым ком-объектом.Действительно, верно и обратное, то есть вы можете вызывать методы c # из JavaScript.Динамический тип позволяет передавать сложные объекты и работать с ними без использования отражения Invoke / GetProperty и т. Д.

Вот очень простой пример.

[ComVisibleAttribute(true)]
public class Ofs
{
   public void MethodA(string msg)
   {
      MessageBox.Show(msg); // hello from js!
   }
}

public class Form1
{

  void Form1()
  {
    WebBrowser b = new WebBrowser();
    b.DocumentText = "<script>"
      + "var a = [];"
      + "a.foo = 'bar!'";
      + "var jsFunc=function(y){alert(y);}"
      + "var jsFunc2=function(){return a;}"
      + "window.external.MethodA('hello from js!');</script>";

    b.ObjectForScripting = new Ofs(); // we can call any public method in Ofs from js now...
    b.Document.InvokeScript("jsFunc", new string[] { "hello!" }); // we can call the js function
    dynamic a = (dynamic)b.Document.InvokeScript("jsFunc2"); // c#'a' is js'a'
    string x = a.foo;
    MessageBox.Show(x); // bar!
  }
}
0 голосов
/ 26 ноября 2010

Да, можно вызывать код Javascript из C #, но не используя динамические типы.

Вместо этого вы можете использовать для этого функциональность eScript JScript.Net.

Следующая статья имеет основы для этого:

http://odetocode.com/Code/80.aspx

...