如何让C#与Javascript互操作?

7
我想在我的C#程序中托管Javascript。我希望允许用户编写自定义的Javascript代码,并使我的C#程序运行他们的函数,同时允许用户使用我的框架代码。
是否可以做到这一点?如果可以,怎么做?
编辑:明确一下,我没有在此项目中使用ASP.NET。

这可以是来自网页还是需要来自Winform? - RossFabricant
理想情况下,它应该能够在接口无关的情况下工作... - Erik Forbes
请参考这个问题 - Jason DeFontes
6个回答

3
你也可以使用WebBrowser控件来在HTML文档中托管JavaScript,为了在两者之间进行交互,你需要创建一个COM可见类并将其实例设置为ObjectForScripting属性。

现在,“external”类的任何公共成员都可以通过javascript中的window.external访问。此外,从托管代码方面,您可以使用document的InvokeScript方法调用任何javascript函数。

通过这种方式,可以轻松地在两者之间传递复杂对象。

我在这个Google Earth Api应用程序中经常使用这个想法。 http://fraserchapman.blogspot.com/2008/08/google-earth-plug-in-and-c.html


啊,太好了!在我之前的谷歌搜索中,我发现有人建议使用WebBrowser控件方法,但是由于没有提供解释,我认为这些建议不适用于我的情况。谢谢 =) - Erik Forbes
如果您也查看此示例,您可以看到更复杂的交互,包括在运行时注入JavaScript的能力...请参阅源代码中的IHTMLScriptElement.cs。http://code.google.com/p/winforms-geplugin-control-library/ - Fraser - Fraser

2
我强烈建议您使用Microsoft Dynamic Language Runtime (DLR)。它的目的是在.Net环境中促进脚本编写。DLR不是特定于脚本的,因此随着时间的推移,将会有更多的脚本语言基于它构建,但目前我知道的只有IronRuby、IronPython和JScript。

我可能会选择这条路线,但我喜欢JavaScript作为一种语言。如果有JavaScript的DLR实现,那就太好了,但到目前为止,我还没有在这个领域看到任何东西。 - Erik Forbes
以前,Microsoft.Scripting库的早期示例中有JScript示例。我已经阅读过它不再得到维护了。 - sipsorcery
是的,您可以使用DLR和动态类型Type - 但您仍然需要首先在浏览器控件中托管JS并创建一个COM可见类。完成后,DLR使得交互操作变得轻松,因为您可以使用点语法等,而不必担心反射和调用。但是,DLR不会为您运行JS,它和动态类型只会让您更轻松地进行IO操作。 - Fraser

1

Spidermonkey .NET 可能是你正在寻找的东西。

我不确定它有多发达。但它基本上是Mozilla's Spidermonkey JavaScript解析引擎的一个移植版本,我非常喜欢它。

或者你可以直接评估它。


1

以前实现这个的方法是使用Windows脚本宿主,它允许您托管JSCript或VBScript。


0

你可以在C#中本地运行Javascript - 可以参考this article。让Javascript访问你的框架可能会更棘手,也许Script#能够帮助?


Script#可以帮忙编写JS,但我不认为它可以帮助他从JS调用.NET代码。 - bdd

0

有一些 HTML 组件可以嵌入 JavaScript。而对于另一种情况,最好的方法是使用 ASP.NET Web 服务。也许通过一个智能客户端,你可以将两者结合起来。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接