Отправить сообщение из элемента управления WebBrowser в родительское приложение - PullRequest
0 голосов
/ 27 сентября 2018

У меня есть два приложения:

  • Устаревшее, написанное на .net
  • Современное веб-приложение с классными функциями html5 / js

Я хочу, чтобы они сосуществовали, поэтому я рассматриваю возможность интеграции элемента управления ActiveX * WebBrowser в мое приложение .net.Я хочу понять, насколько «глубоко» я могу заставить их общаться, а более конкретно:

Какой тип информации я могу отправить из веб-приложения в родительское приложение .net?

В документации Microsoft несколько событий связаны с WebBrowser классом, таким как Navigated, который запускается каждый раз при изменении URL-адреса веб-приложения.Поэтому я могу представить себе механизм, который:

  • изменяет URL
  • , не затрагивая содержимое веб-приложения
  • , но передает некоторую информацию в приложение .net.
  • пример: переход к http://my.web.app/#event=hello&content=you скажет мне, что тип события hello был запущен с контентом you.

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

  • Есть ли что-то более высокого уровня, чем эта идея?В начале я ожидал что-то вроде window.postMessage метода?
  • Если нет, то есть ли библиотека, предоставляющая API более высокого уровня для более простого выполнения таких задач?

1 Ответ

0 голосов
/ 27 сентября 2018

Я думаю, что вы можете построить мост между кодом javascript в современном приложении и вашим хост-приложением C #, используя эту технику https://docs.microsoft.com/en-us/dotnet/framework/winforms/controls/implement-two-way-com-between-dhtml-and-client

Это позволяет выполнять код C # из JS, а также вызывать JS из C #.Вам необходимо установить свойство ObjectForScripting элемента управления WebBrowser для объекта C #, методы которого будут вызываться, а затем вызывать его как

window.external.YourCSharpObjectMethod('called from JS code');
...