JavaScript与托管/本机代码的互操作性
我目前正在构建一个服务器端应用程序,它运行无浏览器的JavaScript和TypeScript程序。我目前使用的JavaScript引擎是微软的JavaScript引擎“Chakra”(不过我还是考虑使用JavaScript.NET,因为它以一种更优雅的方式与谷歌的V8引擎挂钩) 我正在使用C#和.NET4.0对我的应用程序进行编程(以后将转到4.5) 到目前为止,我遇到了几个问题,例如,如果我运行以下程序:JavaScript与托管/本机代码的互操作性,javascript,.net,interop,v8,typescript,Javascript,.net,Interop,V8,Typescript,我目前正在构建一个服务器端应用程序,它运行无浏览器的JavaScript和TypeScript程序。我目前使用的JavaScript引擎是微软的JavaScript引擎“Chakra”(不过我还是考虑使用JavaScript.NET,因为它以一种更优雅的方式与谷歌的V8引擎挂钩) 我正在使用C#和.NET4.0对我的应用程序进行编程(以后将转到4.5) 到目前为止,我遇到了几个问题,例如,如果我运行以下程序: alert("Hello World"); 我收到一个错误,因为“警报”未定义。这大
alert("Hello World");
我收到一个错误,因为“警报”未定义。这大概是在浏览器中实现的!(与HtmleElement、XMLHttpRequest等其他对象一样)
我想知道的是,我可以编写JavaScript代码来封送来自.NET(或其他托管/本机系统)的代码吗
例如:
function alert(message) {
//Performs call to .NET
MessageBox.Show("Hello World");
}
注:
我已经在这里做了一些研究:
有很多方法可以做到这一点。Chakra是windows中的一个“”,它实现了许多COM接口,使其能够告诉操作系统它能够在交互环境中运行脚本文件 这使您能够在应用程序中使用COM(如果您是纯托管的,则使用互操作),并为脚本环境提供本机对象。这就是windows脚本主机的运行方式,当您使用WSH类运行脚本时,它将为所有脚本引擎启用WSH类。 COM。可以使用在运行时将对象公开给正在执行的脚本
我这样做是为了使托管的IE web浏览器控件能够通过javascript调用本机代码,但是您必须非常熟悉COM的工作方式,并且您的COM/interop技能必须非常敏锐。事后看来,这项任务的难度并不值得,因为我的一位同事找到了一种更容易完成脚本/主机RPC的方法(通过观看浏览器ccontrol的导航事件,他能够创建自定义链接,然后通过编程单击它们,然后使用链接中的URL来确定要执行的操作,这是一个相当大的黑客行为,但他在大约5分钟内启动并运行了它,我花了数小时向脚本运行时公开类……)看看这个:谢谢你的回答!我实际上决定现在就使用JavaScript.NET…至少在原型设计阶段(请原谅双关语)我之所以选择JavaScript.NET,是因为它使用Google的V8,而且将来可能需要移植该应用程序,以便与Linux、iOS等一起使用。