質問

C#を使用してIE用のBHOを作成しています。私が懸念しているコードは次のとおりです。

public class BHO : IObjectWithSite, IOleCommandTarget
{
    ...
    public BHO()
    {
        MessageBox.Show("Constructor called");
    }

    public int SetSite(object site)
    {
        MessageBox.Show("SetSite called!");
        if( site != null )
        {
            _webBrowser = (WebBrowser) site;
            _webBrowser.NavigateComplete2 += OnNavigateComplete2;
        }
        else
        {
            _webBrowser.NavigateComplete2 -= OnNavigateComplete2;
            _webBrowser = null;
        }
        return 0;
    }

    private void OnNavigateComplete2(object pDisp, ref object URL)
    {
        MessageBox.Show("OnNavigateComplete2 called");
    }

保護モードをオフにして IE を実行すると、すべてが正常に動作します。ただし、保護モードがオンになっている場合、NavigateCompleted2() は呼び出されますが、SetSite() とコンストラクターは呼び出されません (!?!)。ただし、BHO クラスのメソッドを呼び出すメニュー項目を作成するか、新しいタブを開くと、すべてが正しく呼び出されます。新しい IE ウィンドウを開いたときに機能しない理由を誰か知っていますか?

完全なソースリストはこちらからご覧いただけます ここ.

役に立ちましたか?

解決

MSDN の誰かが私の質問に答えました。コンストラクターとメソッドはまだ呼び出されていますが、何らかの理由で、保護モードで新しいウィンドウを開いたときに、ページが読み込まれるまでメッセージボックスが表示されません。別の問題により、変数が設定されていませんでした。コンストラクターは、静かに失敗していたオブジェクトをインスタンス化していました。

今、別のことで助けが必要です (非常に関係のある) 問題。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top