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

Fre*_*res 11 javascript c# chakra

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

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

Che*_*eso 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);
Run Code Online (Sandbox Code Playgroud)

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

在此输入图像描述

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

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

  • 嗨,你会如何向javascript引擎提供本机对象?IE如果我写函数print(){alert("Hello World"); 它说对象是预期的,大概是因为警报不可用.那么你将如何实现这些东西呢? (2认同)

Ada*_*and 2

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

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

  • 否 - WebBrowser 控件不适合执行 Javascript。如果你想显示网页,那么使用WebBrowser。如果您想从 C# 运行脚本,那么您应该使用 IActiveScript。http://msdn.microsoft.com/en-us/library/ky29ffxd(v=vs.94).aspx 这是 MS 定义的从 .NET 加载和运行脚本的方法。 (6认同)