Будет ли J10-движок IE10 Chakra доступен как самостоятельный доступ из C#?

Microsoft может (на самом деле я так думаю) в будущем выпустить IE10 Chakra (движок JScript) в виде отдельного модуля, такого как google V8 JavaScript Engine.

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

5 ответов

Решение

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

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

Механизм Chakra для Javascript доступен для программ на C# через интерфейс 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, написанное на C#, которое запускает Chakra через этот интерфейс:

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

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

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

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

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

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

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

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

Другие вопросы по тегам