c# - IE10 Chakra JScript 引擎是否可以从 C# 独立访问?

标签 c# javascript chakra

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

  • 问题是:是否可以像 IronPython 一样从 C# 访问该引擎?

最佳答案

Javascript 的 Chakra 引擎可用于 C# 程序,通过 IActiveScript界面。这与 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 测试应用程序,它通过此接口(interface)运行 Chakra:

enter image description here

可以下载from here . (寻找 ScriptHost.zip 文件)

更多信息:
What is the ProgId or CLSID for IE9's Javascript engine (code-named "Chakra")

关于c# - IE10 Chakra JScript 引擎是否可以从 C# 独立访问?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5939002/

相关文章:

c# - 联机异常:Unable to read data from the transport connection: An existing connection was forcibly closed by the remote host

c# - 类中的 var 给出错误

C# 运行带参数的 excel 宏

c# - 实现 IE 9's JavaScript engine (“Chakra” 的 IActiveScript 实例,在 Quirks 模式下工作

javascript - JXcore 可以在 Windows 7 上与 ChakraCore 一起使用吗?

c# - 如何从 avi 文件中获取帧数?并转到特定的框架?

控制台中的 Javascript 生成器语法错误

javascript - 在 HTML 页面上制作 JSON 代码 'cleanly displayed'

javascript - 使用 JavaScript 划分输入字段

javascript - IE11如何填充window.location.origin?