使用c#4.0动态特性从c#调用javascript

使用c#4.0动态特性从c#调用javascript,c#,dynamic,c#-4.0,C#,Dynamic,C# 4.0,可以从c#调用javascript吗?类似这样的东西 ScriptRuntime py = Python.CreateRuntime(); dynamic random = py.UseFile("cal.js"); var result =random.Add(1,2); 加州大学 是的,可以从C#调用Javascript代码,但不能使用动态类型 相反,您可以为此利用JScript.Net的eval功能 以下文章介绍了执行此操作的基本知识: 是的,只要您将js托管在webrowser控件

可以从c#调用javascript吗?类似这样的东西

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

加州大学



是的,可以从C#调用Javascript代码,但不能使用动态类型

相反,您可以为此利用JScript.Net的eval功能

以下文章介绍了执行此操作的基本知识:


是的,只要您将js托管在webrowser控件中。您可以将ObjectForScript和document属性与com可视对象一起使用。事实上,情况正好相反,也就是说,您可以从JavaScript调用c#方法。类型dynamic允许您传递和处理复杂对象,而无需使用反射调用/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!
  }
}
[ComVisibleAttribute(true)]
公开课
{
公共无效方法A(字符串消息)
{
MessageBox.Show(msg);//您好,来自js!
}
}
公开课表格1
{
无效表格1()
{
WebBrowser b=新的WebBrowser();
b、 DocumentText=“”
+“变量a=[];”
+“a.foo=‘bar!'”;
+“var jsFunc=函数(y){alert(y);}”
+“var jsFunc2=函数(){return a;}”
+“window.external.MethodA('hello from js!');”;
b、 ObjectForScript=new Ofs();//我们现在可以从js调用Ofs中的任何公共方法。。。
b、 InvokeScript(“jsFunc”,新字符串[]{“hello!”});//我们可以调用js函数
dynamic a=(dynamic)b.Document.InvokeScript(“jsFunc2”);/c#'a'是js'a'
字符串x=a.foo;
MessageBox.Show(x);//条!
}
}

感谢您的链接,但我的问题是:是否可以从c#just linke IronPython或IronRuby调用javascript?正如Chibacity所说,您不能在当前的JScript引擎中使用dynamic关键字,因此它不会从新语法中受益。但是,您可以使用eval调用JavaScript代码。@santosh您的问题的答案是:不,我提供了一种替代方法,可以从C#实现与JavaScript的互操作性。
[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!
  }
}