2009-05-18 9 views
0

Grüße! So erfassen Sie Ereignisse aus dem neuen Popup-IE-Fenster

Situation:

Mein ActiveX DLL enthält einen benutzerdefinierten Web-Browser. Der Webbrowser zeigt eine Webseite an. Wenn ein Benutzer auf den Link auf der angezeigten Seite klickt, wird ein neues IE-Fenster angezeigt, das zu der URL des angeklickten Links führt.

Frage:

Wie kann ich die DocumenComplete und NavigateComplete Ereignisse aus der NEW gefeuert erfassen IE-Fenster Pop-up?

Was ich schon versucht:

Ich versuchte, die * NewWindow2 (IDispatch ** ppDisp, VARIANT_BOOL Abbrechen) Ereignis von maßgeschneiderten Web-Browser (nicht neuen IE-Fenster) gefeuert zu erfassen und erhalten der Zeiger ppDisp, der auf den neuen IE windown zeigt. Ich habe versucht, diesen Zeiger als Ereignisquelle zu verwenden, um den Ereignishandler (IDispatch :: Invoke) zur Ereigniserfassung zu beraten oder eine Verbindung herzustellen. Es funktioniert jedoch nicht. Möglicherweise liegt der Fehler daran, dass das Dokument im neuen IE-Fenster noch nicht geladen wurde. Ich bin nicht sicher.

Können Sie mir bitte einen Vorschlag machen, was ich tun soll?

Danke!

Antwort

1

Sie erhalten den neuen Webbrowser nicht in ppDisp. Sie erstellen ein Ereignis, senken Ereignisse und geben die Anwendungseigenschaft in ppDisp an das Ereignis zurück.

+0

Können Sie den Unterschied erarbeiten Sie zwischen neuen WebBrowser Zeiger von ppDisp zu erhalten und neue zu erstellen? Laut MSDN ist ppDisp der Zeiger, der den IDispatch-Schnittstellenzeiger eines neuen WebBrowser-Objekts empfängt. – bionicoder

+0

Wie gesagt, Sie erhalten den neuen Webbrowser nicht von ppDisp. Sie erstellen ein neues Webbrowser-Steuerelement, verwerfen seine Ereignisse und rufen dessen Anwendungseigenschaft ab. Setzen Sie den Rückgabewert der Anwendungseigenschaft in ppDisp. –

1
void CYourDlg::OnNewWindow2(LPDISPATCH FAR* ppDisp, BOOL FAR* Cancel) 
{ 
    CDlgNewWB* dlgNewWB = new CYourDlg; 
    this.listDialogWeb.Add(dlgNewWB); 
    dlgNewWB ->Create(IDD_WBDLG_DIALOG); 

    dlgNewWB ->m_webBrowser.SetRegisterAsBrowser(TRUE); 

    *ppDisp = dlgNewWB ->m_webBrowser.GetApplication(); 

}