11

微软可能(实际上我认为它会)在未来发布 IE10 Chakra(JScript 引擎)作为独立模块,就像 google V8 JavaScript 引擎一样。

  • 问题是:引擎会像 IronPython 一样从 C# 访问吗?
4

5 回答 5

23

Javascript 的 Chakra 引擎可通过IActiveScript接口用于 C# 程序。这与 IronPython 模型不同 - 通过 Chakra 以这种方式调用的 JS 未编译为 MSIL,不是 .NET 逻辑。它不在 CLR/DLR 上运行。它在自己的引擎中运行。

// Initialize Chakra (requires IE9 to be installed)
var guid = new System.Guid("{16d51579-a30b-4c8b-a276-0ff4dc41e755}");
Type t = Type.GetTypeFromCLSID(guid, true);
// you must have a p/invoke defn for IActiveScript
var engine = Activator.CreateInstance(t) as IActiveScript;

var site = new ScriptSite(); // this is a custom class
engine.SetScriptSite(site);

var parse32 = engine as IActiveScriptParse32;
parse32.InitNew();

// parse a script
engine.SetScriptState(ScriptState.Connected);
parse32.ParseScriptText(scriptText, null, null, null, IntPtr.Zero, 0, flags, out result, out exceptionInfo);

IntPtr comObject;
engine.GetScriptDispatch(null, out comObject);

// iDispatch is a COM IDispatch  that you can use to invoke script functions. 
var iDispatch = Marshal.GetObjectForIUnknown(comObject);

iDispatch.GetType().InvokeMember(methodName, BindingFlags.InvokeMethod, null, iDispatch, arguments);

这是一个用 C# 编写的 winforms 测试应用程序,它通过这个接口运行 Chakra:

在此处输入图像描述

你可以从这里下载。(查找 ScriptHost.zip 文件)

更多信息:
IE9 的 Javascript 引擎的 ProgId 或 CLSID 是什么(代号为“Chakra”)

于 2011-09-09T22:08:46.463 回答
2

C# 和 IronPython 都是 .NET 语言。它们共享相同的运行时间,因此它们可以轻松交互。没有任何迹象表明 Chakra 是基于 .NET 构建的。相反,鉴于它为了性能而将 JavaScript 编译为机器代码,我会说它不会以相同的方式集成。

他们可能会提供一个 .NET API,可以将 JS 从 .NET 语言传递到 JavaScript 引擎,但这只是我的猜测。

于 2011-05-09T15:33:47.240 回答
2

现在可以通过 pinvoke 从 C# 直接调用 Chakra 运行时。您不需要通过活动脚本。该 api 非常好而且非常快。以下是如何在 MSDN 上执行此操作的示例:

http://code.msdn.microsoft.com/windowsdesktop/JavaScript-Runtime-Hosting-d3a13880

于 2014-01-16T16:23:39.040 回答
0

JavaScript(作为 JScript)是 .Net 支持的原始语言之一。支持是在动态可用之前创建的,因此它与 IronPython 不同...如果您需要 .Net 中的 JavaScript 引擎,它可能足以满足您的需求 - http://msdn.microsoft.com/en-us /library/72bd815a(v=VS.100).aspx

于 2011-05-09T16:07:50.467 回答
0

查看 Microsoft 刚刚发布的关于此主题的内容:

http://blogs.windows.com/msedgedev/2015/05/18/using-chakra-for-scripting-applications-across-windows-10/#comment-841

在博客答案中,您可以找到 Microsoft 的最新评论。答案是:“Re:Windows scripting – Windows Scripting host 支持 JavaScript,但不基于 Chakra 引擎。目前,该项目不打算更改相同的内容。”

于 2015-05-21T06:52:04.843 回答