微软可能(实际上我认为它将来)将IE10 Chakra(JScript引擎)作为独立模块发布,就像谷歌V8 JavaScript引擎一样。
答案 0 :(得分: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:
您可以下载from here。 (查找ScriptHost.zip文件)
更多信息:
What is the ProgId or CLSID for IE9's Javascript engine (code-named "Chakra")
答案 1 :(得分:2)
C#和IronPython都是.NET语言。它们共享相同的运行时,因此它们可以轻松交互。没有任何迹象表明Chakra是基于.NET构建的;相反,鉴于它为了性能而将JavaScript编译为机器代码,我会说它不会以相同的方式集成。
他们可能会提供一个.NET API,可以将JS从.NET语言传递到JavaScript引擎,但这只是我的推测。
答案 2 :(得分:2)
Chakra运行时现在可以通过pinvoke直接从C#调用。您不需要通过活动脚本。 api非常好,非常快。以下是如何在MSDN上执行此操作的示例:
http://code.msdn.microsoft.com/windowsdesktop/JavaScript-Runtime-Hosting-d3a13880
答案 3 :(得分:0)
JavaScript(作为JScript)是.Net支持的原始语言之一。在动态可用之前就已经创建了支持,因此它与IronPython不同......如果你需要.Net中的JavaScript引擎,它可能足以满足你的需求 - http://msdn.microsoft.com/en-us/library/72bd815a(v=VS.100).aspx。
答案 4 :(得分:0)
查看微软刚刚发布的有关此主题的内容:
在博客答案中,您可以找到Microsoft的最新评论。答案是: “Re:Windows脚本 - Windows Scripting主机支持JavaScript但不基于Chakra引擎。目前,该项目并不打算改变它。”