我如何让C#与Java互操作?

问题描述 投票:6回答:7

我想在我的C#程序中托管Javascript。我想允许用户编写自定义Javascript代码,并让我的C#程序运行其功能,并允许用户使用我的框架代码。

可以这样做吗?如果是这样,如何?

编辑:为清楚起见,我不是在此项目中使用ASP.NET。

c# javascript interop
7个回答
3
投票

您还可以使用Webbrowser控件将javascript托管在html文档中,在两者之间进行交互,您将使COM可见类并将其实例设置为ObjectForScripting属性。

现在,可通过javascript中的window.external访问'external'类的任何公共成员。另外,从托管代码方面,您可以使用文档的InvokeScript方法来调用任何javascript函数。

这样很容易在两者之间传递复杂的对象。

我在此Google Earth Api应用程序中使用了很多想法。http://fraserchapman.blogspot.com/2008/08/google-earth-plug-in-and-c.html


2
投票

我强烈建议您使用Microsoft Dynamic Langauage Runtime (DLR)。生活中的目的是促进.Net环境中的脚本编写。 DLR不是特定于脚本的,因此随着时间的流逝,将在其之上构建更多的脚本语言,但目前我所知道的是IronRuby,IronPython和JScript。


1
投票

Spidermonkey .NET可能正是您想要的。

我不确定它有多发达。但是基本上它是我非常喜欢的Mozilla's Spidermonkey Javascript解析器引擎的端口。

或者您可以评估它directly


1
投票

此方法以前是Windows脚本宿主,它允许您宿主JSCript或VBScript。


0
投票

您当然可以从C#本机运行Javascript-入门请参见this article。但是,让Javascript访问您的框架可能会更麻烦。也许Script#可以帮助?


0
投票

有些HTML组件可以嵌入JavaScript。另一方面,正确的方法是ASP.NET Web服务。也许有了智能客户端,您可以将两者结合起来。


0
投票

我知道这已经晚了十年,但是这个问题仍然出现在“ javascript C#interop”的搜索结果中。对于希望从C#运行javascript的任何人,请考虑Jering.Javascript.NodeJS

using Jering.Javascript.NodeJS;

...

string javascriptModule = @"
module.exports = (callback, x, y) => {  // Module must export a function that takes a callback as its first parameter
    var result = x + y; // Your javascript logic
    callback(null /* If an error occurred, provide an error object or message */, result); // Call the callback when you're done.
}";

// Invoke javascript
int result = await StaticNodeJSService.InvokeFromStringAsync<int>(javascriptModule, args: new object[] { 3, 5 });

// result == 8
Assert.Equal(8, result);
© www.soinside.com 2019 - 2024. All rights reserved.