2014-02-12 58 views
2

我正在學習在c#中編寫BHO,並且我已經爲DocumentComplete和BeforeNavigate2編寫了事件處理程序。在調試過程中,我注意到他們被多次觸發,如yahoo.co.in等某些網頁。如何知道整個文檔的查找DocumentComplete和BeforeNavigate2事件?

據我所知,這可能是因爲頁面中存在多個框架。 我的問題是: -

  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) 
{ 
} 
+1

1(也許2)聽起來像它回答這個:http://stackoverflow.com/a/8359461/593627 –

+0

@GeorgeDuckett,部分它關於'_pUnkSite'是錯誤的。該站點對象不引用頂部瀏覽器對象。 – Noseratio

+1

@Noseratio:好的,謝謝你的糾正。說實話,我對這個話題並不熟悉,我剛剛找到答案(已被接受),並認爲它是正確的(沒有看評論)。 –

回答

2

使用BeforeNavigate2DocumentComplete事件處理程序的pDisp參數,它是指對應於該幀的SHDocVw.WebBrowser對象的實例(或頂部瀏覽器):

static bool IsTop(object pDisp) 
{ 
    var thisBrowser = pDisp as SHDocVw.WebBrowser; 
    var parent = thisBrowser .Parent as SHDocVw.WebBrowser; 
    return (parent == thisBrowser || parent == null); 
} 
相關問題