レガシ 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 用です。私がこれまでにできたのはここまでです。
- C++ アプリが HTML5 モジュールからクリックのイベントを受信できるように、何かを接続することさえ可能でしょうか?
- もしそうなら、どのように?私は立ち往生しており、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>