2

我正在学习用 c# 编写 BHO,并且我已经为 DocumentComplete 和 BeforeNavigate2 编写了事件处理程序。在调试过程中,我注意到某些网页(如 yahoo.co.in)会多次触发它们。

我知道这可能是因为页面中存在多个框架。我的问题是:-

  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 回答