Приложение C ++ (MFC) с CWebBrowser2 — & gt; ChromeFrame — & gt; Приложение HTML5, как получить события кликов из HTML5 в приложение C ++?

У нас есть устаревшее приложение C ++ (MFC). Одна его часть содержит объект CWebBrowser2, в котором мы переходим к URL-адресу, который является новым модулем, который мы разрабатываем для добавления в наше приложение.
Модуль представляет собой приложение HTML5. Поскольку CWebBrowser2 использует IE (в настоящее время IE8), URL, который мы передаем ему, загружает Chrome Frame и передает этот другой URL, который является нашим модулем.

Итак, URL-адрес выглядит примерно так (примечание: пользователь не может ввести это, он настроен нами для каждого сайта):

http://server/ChromeFrameWrapper.htm?http://server/Module.htm?Param1=something&Param2=somethingElse

Внутри ChromeFrameWrapper.htm у нас есть код, который будет захватывать URL, брать часть после первого? и установите для него chromeFrame.src, таким образом, наш модуль хорошо отображается в нашем приложении C ++.

Теперь проблема. В этом модуле HTML5 у нас есть несколько кнопок навигации (примечание: это может быть привязка, если это то, что нужно). То, что мы хотим, чтобы произошло, когда пользователь нажимает одну из этих кнопок, основное приложение (приложение C ++ MFC) уведомляется о щелчке.
Поскольку есть несколько кнопок, нам нужно знать, какая это кнопка, поскольку мы будем перемещаться в разные места в приложении C ++ на основе того, на что нажали (у нас есть причины для этого, это просто первый шаг в нашей полной замене приложения C ++).

В приложении C ++ я могу получить объект IHTMLDocument2 и коллекцию тегов, однако это для HTML ChromeFrameWrapper. Это так далеко, как я смог зайти так далеко.

  1. Можно ли вообще что-то подключить, чтобы наше приложение на C ++ могло получать события кликов из модуля HTML5?
  2. Если так, то как? Я застрял и не смог найти никаких примеров, связанных с размещением Chrome Frame в HTML и событиями. Правильно ли использовать MSHTML или есть что-то еще?

Вот сценарий и основной HTML для ChromeFrameWrapper.htm. Обратите внимание, мы пытаемся доказать, что это работает, поэтому не критикуйте код, если только это не решит мою проблему.

Спасибо за любую помощь и понимание.

<SCRIPT type="text/javascript">
function GetChromeFrame() {
var chromeFrame = window.document.ChromeFrame
return chromeFrame;
}

function onLoad() {
var theUrl = window.location.href;

// just grab the arguments and pass them as is
var chromeFrameSource = GetArgumentsFromUrl(theUrl);

var chromeFrame = GetChromeFrame();
chromeFrame.src = chromeFrameSource;
}

function GetArgumentsFromUrl(theUrl)
{
if(theUrl.indexOf("?") != -1)
{
return theUrl.substring(theUrl.indexOf("?") + 1);
}
return "";
}
</SCRIPT>

<BODY onload="onLoad();">
<center>
<OBJECT ID="ChromeFrame" WIDTH=1060 HEIGHT=800 CODEBASE="http://www.google.com" CLASSID="CLSID:E0A900DF-9611-4446-86BD-4B1D47E7DB2A">
<PARAM NAME="src" VALUE="http://www.google.com" />
<embed ID="ChromeFramePlugin" NAME="ChromeFrame" SRC="http://www.google.com" TYPE="application/chromeframe"/>
</OBJECT>
</center>
</BODY>

0

Решение

Как предположил Шейн Холлоуэй, это было достигнуто с помощью WebSockets.
Я открыл прослушивающий сокет в своем приложении MFC, а затем приложение HTML5 открыло веб-сокет для подключения к сокету в приложении MFC.

Просто. Я подходил ко всему неправильно.
Не знаю, будет ли это полезным вопросом / ответом для кого-либо еще, но подумал, что поделюсь решением, которое я реализовал, так как оно работает ОТЛИЧНО.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]