我认为微软可能会在未来发布IE10 Chakra(JScript引擎)作为一个独立的模块,就像Google V8 JavaScript引擎一样。
- 问题是:这个引擎是否能够像IronPython一样从C#中访问?
我认为微软可能会在未来发布IE10 Chakra(JScript引擎)作为一个独立的模块,就像Google V8 JavaScript引擎一样。
// 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:
C#和IronPython都是.NET语言。它们共享相同的运行时,因此它们可以轻松地互操作。没有任何迹象表明Chakra是建立在.NET上的;相反,考虑到它为了性能将JavaScript编译为机器代码,我认为它不会以同样的方式集成。
它们可能提供一个.NET API,使得从.NET语言传递JS到JavaScript引擎成为可能,但这只是我的猜测。
JavaScript(作为JScript)是.Net支持的最初语言之一。在动态性可用之前就已经创建了支持,因此在这个意义上它与IronPython不同...如果您需要在.Net中使用JavaScript引擎,则可能已经足够满足您的需求-http://msdn.microsoft.com/en-us/library/72bd815a(v=VS.100).aspx。
请查看微软最新发布的关于这个话题的内容:
在博客回答中,您可以找到来自微软的最新评论。答案是:“关于Windows脚本编写——Windows脚本宿主支持JavaScript,但不基于Chakra引擎。目前,该项目没有打算改变这一点。”