首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JavaScript与托管/本机代码的互操作性

JavaScript与托管/本机代码的互操作性
EN

Stack Overflow用户
提问于 2012-10-24 02:23:32
回答 1查看 1K关注 0票数 0

我目前正在构建一个运行无浏览器JavaScript和TypeScript程序的服务器端应用程序。我目前使用的JavaScript引擎是微软的JavaScript引擎"Chakra“(不过,考虑使用JavaScript.NET,因为它以一种更优雅的方式连接到了谷歌的V8引擎)。

我正在使用C#和.NET 4.0来编写我的应用程序(继续使用4.5 )

到目前为止,我遇到了一些问题,例如,如果我运行以下命令:

代码语言:javascript
复制
alert("Hello World");

我得到一个错误,因为"alert“是未定义的。这大概是在浏览器中实现的!(其他对象如HTMLElement、XMLHttpRequest等也是如此)

我想知道的是,我是否可以编写从.NET (或其他托管/本机系统)编组代码的JavaScript代码

例如:

代码语言: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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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分钟内启动并运行了它,而我花了几个小时将类暴露给脚本运行时...)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13036786

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档