我目前正在构建一个运行无浏览器JavaScript和TypeScript程序的服务器端应用程序。我目前使用的JavaScript引擎是微软的JavaScript引擎"Chakra“(不过,考虑使用JavaScript.NET,因为它以一种更优雅的方式连接到了谷歌的V8引擎)。
我正在使用C#和.NET 4.0来编写我的应用程序(继续使用4.5 )
到目前为止,我遇到了一些问题,例如,如果我运行以下命令:
alert("Hello World");我得到一个错误,因为"alert“是未定义的。这大概是在浏览器中实现的!(其他对象如HTMLElement、XMLHttpRequest等也是如此)
我想知道的是,我是否可以编写从.NET (或其他托管/本机系统)编组代码的JavaScript代码
例如:
function alert(message) {
//Performs call to .NET
MessageBox.Show("Hello World");
}备注:
我已经在这里做了一些研究:
Embedding JavaScript engine into .NET
Referencing Google's V8 engine from a .NET app
Javascript engine with good interoperability with JVM and CLR
发布于 2012-10-25 01:29:19
有许多方法可以做到这一点。Chakra是windows中的“active script engine”,它实现了许多COM接口,使其能够告知操作系统它能够在交互环境中运行脚本文件。
这样做的目的之一是在应用程序中使用COM (如果您是纯托管的,则为互操作),并为脚本环境提供本机对象。这就是windows脚本宿主的运行方式,当您使用WSH类运行脚本时,它会启用它承载的所有脚本引擎的WSH类。COM interface references are on MSDN。您可以使用IActiveScript::AddNamedItem在运行时向正在执行的脚本公开对象。
我这样做是为了使托管的IE web浏览器控件能够通过javascript调用本机代码,但您必须非常熟悉COM的工作方式,并且您的COM/互操作技能必须非常敏锐。事后看来,这项工作的难度是不值得的,因为我的一位同事找到了一种更简单的方法来完成脚本/主机RPC (通过查看浏览器ccontrol的导航事件,他能够创建自定义链接,然后通过编程单击它们,然后使用链接中的URL来确定要执行的操作,这相当麻烦,但他在大约5分钟内启动并运行了它,而我花了几个小时将类暴露给脚本运行时...)
https://stackoverflow.com/questions/13036786
复制相似问题