0

我目前正在构建一个运行无浏览器的 JavaScript 和 TypeScript 程序的服务器端应用程序。我目前使用的 JavaScript 引擎是 Microsoft 的 JavaScript 引擎“Chakra”(不过考虑使用 JavaScript.NET,因为它以更优雅的方式与 Google 的 V8 引擎挂钩)。

我正在使用 C# 和 .NET 4.0 对我的应用程序进行编程(前进到 4.5)

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

alert("Hello World");

我收到一个错误,因为“警报”未定义。想必这是在浏览器中实现的!(与 HTMLElement、XMLHttpRequest 等其他对象一样)

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

例如:

function alert(message) {
    //Performs call to .NET
    MessageBox.Show("Hello World");
}

笔记:

我已经在这里做了一些研究:

将 JavaScript 引擎嵌入 .NET

从 .NET 应用程序引用 Google 的 V8 引擎

与 JVM 和 CLR 具有良好互操作性的 Javascript 引擎

4

1 回答 1

0

有很多方法可以解决这个问题。Chakra 是 Windows 中的“活动脚本引擎”,并实现了许多 COM 接口,使其能够告诉操作系统它能够在交互式环境中运行脚本文件。

这可以实现的一件事是在应用程序中使用 COM(如果您是纯托管的,则为互操作)并向脚本环境提供本机对象。这就是 windows 脚本宿主的运行方式,并在您使用它运行脚本时将 WSH 类启用到它所托管的所有脚本引擎。COM接口参考在 MSDN 上。您可以使用IActiveScript::AddNamedItem在运行时将对象公开给正在执行的脚本。

我这样做是为了使托管的 IE Web 浏览器控件能够通过 javascript 调用本机代码,但是您必须对 COM 的工作非常熟悉,并且您的 COM/互操作技能必须非常敏锐。事后看来,这项艰巨的任务并不值得,因为我的一位同事发现了一种更简单的方法来完成脚本/主机 RPC(通过观察浏览器 ccontrol 的导航事件,他能够制作自定义链接,然后以编程方式单击它们然后使用链接中的 URL 来确定要执行哪个操作,这是一个非常黑客但他在 5 分钟内启动并运行它,我花了几个小时将类暴露给脚本运行时......)

于 2012-10-24T17:29:19.427 回答