Будет ли доступ к IE10 Chakra JScript доступным для С#?

Microsoft может (на самом деле, я думаю, это будет) в будущей версии IE10 Chakra (JScript engine) как автономный модуль, такой как Google V8 JavaScript Engine.

  • Вопрос: будет ли доступным движок с С#, например, IronPython?

Ответ 1

С# и IronPython - это языки .NET. Они имеют одинаковое время выполнения, поэтому они могут легко взаимодействовать. Нечего предположить, что Chakra построен на .NET; скорее, учитывая, что он компилирует JavaScript для машинного кода ради производительности, я бы сказал, что он не будет интегрироваться таким же образом.

Они могут предоставить .NET API, который позволит передавать JS с языка .NET на механизм JavaScript, но это только догадывается с моей стороны.

Ответ 2

Механизм Chakra для Javascript доступен для программ С# через интерфейс IActiveScript. Это не то же самое, что и модель IronPython - JS, вызванный таким образом через Chakra, не компилируется в 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);

Здесь выполняется тестовое приложение winforms, написанное на С#, которое запускает Chakra через этот интерфейс:

enter image description here

Вы можете скачать здесь. (найдите файл ScriptHost.zip)

Дополнительная информация:
Что такое ProgId или CLSID для Javascript-движка IE9 (под кодовым названием Chakra ")

Ответ 3

Среда выполнения Chakra теперь доступна для прямого вызова с С# через pinvoke. Вам не нужно проходить активный script. Апи неплохо и очень быстро. Вот пример того, как это сделать в MSDN:

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

Ответ 4

JavaScript (как JScript) является одним из исходных языков, поддерживаемых .Net. Поддержка была создана до того, как была доступна динамика, поэтому в этом смысле она отличается от IronPython... Если вам нужен движок JavaScript в .NET, этого может быть достаточно для ваших нужд - http://msdn.microsoft.com/en-us/library/72bd815a(v=VS.100).aspx.

Ответ 5

Ознакомьтесь с тем, что Microsoft только что выпустила по этой теме:

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

Внутри ответа блога вы можете найти последний комментарий от Microsoft. Ответ: Re: Windows scripting - хост Windows Scripting поддерживает JavaScript, но не основан на движке Chakra. На данный момент этот проект не намерен менять то же самое.