IE10 Chakra JScript引擎是否可以作为独立的C#访问?

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

  • 问题是:引擎可以从C#中访问IronPython吗?

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

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

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 ap/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”)

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

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

JavaScript(作为JScript)是.Net支持的原始语言之一。 在动态可用之前就已经创建了支持,所以在这种情况下它与IronPython不同……如果你需要.Net中的JavaScript引擎它可能足以满足你的需求 – http://msdn.microsoft.com/en-us /library/72bd815a(v=VS.100).aspx 。

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

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

在博客答案中,您可以找到Microsoft的最新评论。 答案是:“Re:Windows脚本 – Windows Scripting主机支持JavaScript但不基于Chakra引擎。目前,该项目并不打算改变它。”