0

レガシ C++ (MFC) アプリケーションがあります。その一部は、アプリケーションに追加するために開発中の新しいモジュールである URL に移動する CWebBrowser2 オブジェクトをホストします。モジュールは HTML5 アプリケーションです。CWebBrowser2 は IE (現在は IE8) を使用するため、それに渡す URL は Chrome フレームをロードし、モジュールである別の 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++ アプリの完全な置き換えのステップ 1 にすぎません)。

C++ アプリでは、IHTMLDocument2 オブジェクトとタグのコレクションを取得できますが、これは ChromeFrameWrapper HTML 用です。私がこれまでにできたのはここまでです。

  1. C++ アプリが HTML5 モジュールからクリックのイベントを受信できるように、何かを接続することさえ可能でしょうか?
  2. もしそうなら、どのように?私は立ち往生しており、Chrome Frame でホストされている HTML とイベントを含む例を見つけることができませんでした。MSHTML を正しい方法で使用していますか、それとも他に何かありますか?

ChromeFrameWrapper.htm の SCRIPT とメイン HTML は次のとおりです。注意してください、私たちはそれが機能することを証明しようとしているので、私の問題を解決しない限り、コードの批評はありません.

助けと洞察をありがとう。

<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>
4

1 に答える 1

2

Shane Hollowayが示唆したように、これはWebSocketを使用して達成されました。MFCアプリケーションでリスニングソケットを開き、HTML5アプリケーションでWebSocketを開いて、MFCアプリケーションのソケットに接続しました。

単純。私はそれにすべて間違って近づいていました。これが他の人にとって有用な質問/回答になるかどうかはわかりませんが、うまく機能するので、実装したソリューションを共有したいと思いました。

于 2012-10-17T20:51:20.180 に答える