ADN Open CIS
Сообщество программистов Autodesk в СНГ

06/02/2018

Внедрение JavaScript в настольные приложения (.NET)

При помощи webcontrol CefSharp мы можем запустить полный браузер Chromium, встроенный в нашe настольное приложение .NET. Это супер мощно! Но как насчет интеграции с нашим C#.NET? Конечно, это возможно, просто нужно подумать о сценариях.

Во-первых, среда JavaScript находится внутри Chromium и отделена отнастольного .NET приложения, поэтому нам нужны точки интеграции.

1. Запустите код и дождитесь значения return: в этом случае нам нужно запустить функцию JavaScript и получить результат, который во многих случаях подходит. Нам просто нужно осуществить вызов .EvaluateScriptAsync() метода, передавая код JavaScript.

Код - C#: [Выделить]
  1. // Браузер CefSharp
  2. var theScript = @"
  3. (function (){
  4. return LMV_VIEWER_VERSION;
  5. }());
  6. ";
  7. browser.EvaluateScriptAsync(theScript)

Это уже хорошо, но умеренно, поскольку большинство методов просмотра являются асинхронными.

2. Запустите код и дождитесь вывода информации: теперь давайте запустим код и дождёмся вывода, например, строка console.log. В этом случае наше приложение должно быть перечислено в событии ConsoleMessage. Здесь JavaScript браузера может преобразовать в строку JSON и.NET приложение может анализировать его. Simple.

Код - C#: [Выделить]
  1. public Form1()
  2. {
  3. InitializeComponent();
  4. // какой-токод
  5. browser.ConsoleMessage += Browser_ConsoleMessage;
  6. }
  7.  
  8. private void Browser_ConsoleMessage(object sender, ConsoleMessageEventArgs e)
  9. {
  10. JObject o = JObject.Parse(e.Message);
  11. }

Но есть трюк: в консоли много сообщений, поэтому вашему приложению может потребоваться проверить или прослушать только в определенное время, чтобы избежать ошибок.

В качестве практического примера, скажем, нашего .NET приложения, нуждается в списке листа на модели. На основании кода из этой статьи, давайте сделаем небольшое изменение, чтобы преобразовать результаты в строку:

Код - C#: [Выделить]
  1. getAllLeafComponents(viewerApp.myCurrentViewer, function (dbIds) {
  2. console.log(JSON.stringify(dbIds);
  3. })

Затем применим к событию консольного приложения метод JArray.Parse . Готово. Сейчас.NET имеет список целых чисел.

Источник: https://forge.autodesk.com/blog/javascript-desktop-apps-net

Автор перевода: Дмитрий Емельянов
Опубликовано 06.02.2018
Отредактировано 06.02.2018 в 13:08:18