使用 C# 4.0 动态功能从 C# 调用 javascript

发布于 2024-10-05 07:02:00 字数 280 浏览 2 评论 0原文

是否可以从 C# 调用 javascript 类似的东西?

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);
    }

Is it possible to call javascript from c# something like this?

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);
    }

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

冷默言语 2024-10-12 07:02:00

是的,只要您将 js 托管在网页浏览器控件中即可。为此,您可以使用 ObjectForScripting 和文档属性以及 com 可见对象。事实上,反之亦然,即您可以从 JavaScript 调用 C# 方法。动态类型允许您传递和使用复杂的对象,而无需使用反射 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!
  }
}

Yes, as long as you host the js in a webrowser control. You can use the ObjectForScripting and document properties for this along with a com visible object. Indeed the opposite is true as well, that is you can call c# methods from JavaScript. The type dynamic allow you to pass, and work with, complex objects without having to use reflection Invoke/GetProperty, etc.

Here is a really simple example.

[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!
  }
}
儭儭莪哋寶赑 2024-10-12 07:02:00

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

相反,您可以利用 JScript.Net 的 eval 功能来实现此目的。

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

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

Yes it is possible to call Javascript code from C#, but not by using dynamic types.

Instead, you can leverage JScript.Net's eval functionality for this.

The following article has the basics of doing this:

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文