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

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

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

Ответы [ 5 ]

23 голосов
/ 10 сентября 2011

Механизм 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 через этот интерфейс:

enter image description here

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

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

2 голосов
/ 16 января 2014

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

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

2 голосов
/ 09 мая 2011

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

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

0 голосов
/ 21 мая 2015

Проверьте, что 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 host поддерживает JavaScript, но не основан на движке Chakra. На данный момент этот проект не намерен менять то же самое».

0 голосов
/ 09 мая 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...