2

私は C# で BHO を作成することを学んでおり、DocumentComplete と BeforeNavigate2 のイベント ハンドラーを作成しました。デバッグ中に、yahoo.co.in などの特定の Web ページで複数回トリガーされることに気付きました。

これは、ページに複数のフレームが存在することが原因である可能性があることを理解しています。私の質問は:-

  1. ページ全体が読み込まれているイベントを確認するにはどうすればよいですか?
  2. ページから離れようとしているときにトリガーされるイベントをどのように知ることができますか?

サンプルコードの追加

private InternetExplorer iExplorer;
int IObjectWithSite.SetSite(object pUnkSite)
{
    if (pUnkSite != null)
    {
        ieInstance = (InternetExplorer)pUnkSite;
        // Register the DocumentComplete event.
        ieInstance.DocumentComplete += new DWebBrowserEvents2_DocumentCompleteEventHandler(ieInstance_DocumentComplete);
        ieInstance.BeforeNavigate2 += new DWebBrowserEvents2_BeforeNavigate2EventHandler(ieInstance_BeforeNavigate2);
    }
    return 0;
}

private void ieInstance_BeforeNavigate2(object pDisp, ref object URL, ref object Flags, ref object TargetFrameName, ref object PostData, ref object Headers, ref bool Cancel)
{
}

private void ieInstance_DocumentComplete(object pDisp, ref object URL)
{
}
4

1 に答える 1

2

およびイベント ハンドラーのpDispパラメーターを使用します。これは、フレーム (またはトップ ブラウザー) に対応するオブジェクトのインスタンスを参照します。BeforeNavigate2DocumentCompleteSHDocVw.WebBrowser

static bool IsTop(object pDisp)
{
    var thisBrowser = pDisp as SHDocVw.WebBrowser;
    var parent = thisBrowser .Parent as SHDocVw.WebBrowser;
    return (parent == thisBrowser || parent == null);
}
于 2014-02-12T10:59:16.680 に答える