So stellen Sie fest, wenn eine Seite im WebBrowser-Steuerelement laden erfolgt

Wichtig: Dieser Artikel wurde maschinell und nicht von einem Menschen übersetzt. Die Microsoft Knowledge Base ist sehr umfangreich und ihre Inhalte werden ständig ergänzt beziehungsweise überarbeitet. Um Ihnen dennoch alle Inhalte auf Deutsch anbieten zu können, werden viele Artikel nicht von Menschen, sondern von Übersetzungsprogrammen übersetzt, die kontinuierlich optimiert werden. Doch noch sind maschinell übersetzte Texte in der Regel nicht perfekt, insbesondere hinsichtlich Grammatik und des Einsatzes von Fremdwörtern sowie Fachbegriffen. Microsoft übernimmt keine Gewähr für die sprachliche Qualität oder die technische Richtigkeit der Übersetzungen und ist nicht für Probleme haftbar, die direkt oder indirekt durch Übersetzungsfehler oder die Verwendung der übersetzten Inhalte durch Kunden entstehen könnten.

Den englischen Originalartikel können Sie über folgenden Link abrufen: 180366
Disclaimer zu nicht mehr gepflegten KB-Inhalten
Dieser Artikel wurde für Produkte verfasst, für die Microsoft keinen Support mehr anbietet. Der Artikel wird deshalb in der vorliegenden Form bereitgestellt und nicht mehr weiter aktualisiert.
Zusammenfassung
Internet Explorer-WebBrowser-Steuerelement löst das Ereignis DocumentCompletenach Beendigung eine Webseite herunterladen. Sie können einen Ereignishandler erstellen.Funktion in der Anwendung für dieses Ereignis. Dieser Artikel beschreibt dieSchritte zum Ermitteln, ob ein WebBrowser-Steuerelement ist abgeschlossenHerunterladen einer Webseite.
Weitere Informationen
Das WebBrowser-Steuerelement löst das Ereignis DocumentComplete bei seiner ReadyStateEigenschaft ist in READYSTATE_COMPLETE geändert. Dies weist darauf hin, dass dieWebBrowser-Steuerelement ist abgeschlossen die Webseite herunterladen. Hier sind einigewichtige Punkte zu dieser Veranstaltung:
  • Bei einer Seite ohne Rahmen ist die DocumentComplete einmal ausgelöst. Nachdem alles erledigt ist.
  • Im Falle von mehreren Frames ruft DocumentComplete mehrmals ausgelöst. Nicht jeder Frame löst dieses Ereignis, aber jeder Frame, der ausgelöst wird ein DownloadBegin-Ereignis wird ein entsprechendes DocumentComplete-Ereignis ausgelöst.
  • Das Ereignis DocumentComplete hat einen IDispatch * Parameter, die die IDispatch des Rahmens (Shdocvw) für die DocumentComplete ausgelöst wird.
  • Der oberste Frame löst die DocumentComplete am Ende. Also, überprüft, ob eine Seite vollständig herunterladen, Sie müssen zu überprüfen, ob die IDispatch *-Parameter ist identisch mit der IDispatch des WebBrowser-Steuerelements.

    Für Visual Basic ist hier Code, der diese Überprüfung durchführt:
    Private Sub WebBrowser1_DocumentComplete(ByVal pDisp As Object,                                         URL As Variant)   If (pDisp Is WebBrowser1.Object) Then      Debug.Print "Web document is finished downloading"   End IfEnd Sub					
Behandeln Sie das Ereignis "DocumentComplete" in Visual C++, und prüfen Sie, ob dieDownload der Webseite abgeschlossen ist, gehen Sie folgendermaßen vor.

Beachten Sie, dass die Schritte von der Weise abhängen Sie das WebBrowser-Steuerelement verwenden.
  • Wenn Sie das WebBrowser-Steuerelement in einem CWnd/CView-Objekt, erstellen SieFühren Sie die Schritte 1 bis 4 müssen.
  • Wenn Sie das WebBrowser-Steuerelement in einem CDialog/CFormView-Objekt erstellen,nur müssen Sie, führen Sie Schritt 4.
  • Bei Verwendung die mit Visual C++ 6.0 bereitgestellte CHtmlView-KlasseÜberschreiben Sie CHtmlView::DocumentComplete() und führen Sie Schritt 4, mit derM_pBrowserApp Member der Klasse CHtmlView auf das WebBrowser-Steuerelement zugreifen.
  1. Definieren Sie die OnDocumentComplete-Methode in der Headerdatei für die CWnd/CView abgeleitete Klasse:
    afx_msg void OnDocumentComplete(LPDISPATCH lpDisp,                                VARIANT FAR* URL);					
  2. Deklarieren Sie die Ereignissenke in derselben Headerdatei:
    DECLARE_EVENTSINK_MAP()					
  3. In der Implementierungsdatei (.cpp) für die CWnd/CView abgeleitete Klasse Implementieren der Ereignisbehandlungszuordnung:
    BEGIN_EVENTSINK_MAP(CYourView, CView)   ON_EVENT(CWBTstView, ID_WEB_BROWSE, 259 /* DocumentComplete */,            OnDocumentComplete, VTS_DISPATCH VTS_PVARIANT)END_EVENTSINK_MAP()					
  4. Implementieren Sie die OnDocumentComplete-Methode:
    void CWBTstView::OnDocumentComplete(LPDISPATCH lpDisp,                                    VARIANT FAR* URL){   IUnknown*  pUnk;   LPDISPATCH lpWBDisp;   HRESULT    hr;   pUnk = m_webBrowser.GetControlUnknown();   ASSERT(pUnk);   hr = pUnk->QueryInterface(IID_IDispatch, (void**)&lpWBDisp);   ASSERT(SUCCEEDED(hr));   if (lpDisp == lpWBDisp )   {      // Top-level Window object, so document has been loaded      TRACE("Web document is finished downloading\n");   }  lpWBDisp->Release();}					
Dieser Ansatz funktioniert, wenn das WebBrowser-Steuerelement zu einer Seite navigiert,ändert sich den oberste Frame. Angenommen, wenn die Navigation innerhalb eines Rahmens auftrittselbst ist dann die endgültige DocumentComplete, das ausgelöst wird, des Rahmensund nicht der oberste Frame. Betrachten Sie beispielsweise das folgende Szenario.

Das WebBrowser-Steuerelement ist ein Frameset hosten. Innerhalb eines Frames dieFrameset, klickt der Benutzer auf eine Verknüpfung, die zum Öffnen einer neuen Seite im frameselbst und den Rest des Framesets intakt bleibt. Konnte die neue Seiteenthalten Sie mehrere Frames wieder. So werden mehrere DocumentCompleteBenachrichtigungen (eine für jeden neuen Frame). Da der oberste Frame hat jedochnicht geändert, wäre die endgültige DocumentComplete, dass der Rahmen, die hatgeändert.

Wenn Sie das vollständig in das endgültige Dokument überprüfen möchtenSzenario können Sie Folgendes tun:
Überprüfen Sie, ob der IDispatch-Parameter, der die DocumentComplete identisch ist. der erste NavigateComplete2 Ereignis IDispatch-Parameter. Da die erste NavigateComplete2 ist der oberste Frame und dem letzten DocumentComplete führt des Rahmens der obersten Ebene, einen Vergleich eine Art und Weise informiert, ob die Seite vollständig herunterladen.
Hier werden einige C++-Beispielcode:
LPDISPATCH glpDisp = NULL; // global LPDISPATCH, can also                           // be of class scope// NavigateComplete2 eventvoid CWebbrDlg::OnNavigateComplete2Explorer1(LPDISPATCH pDisp,                                             VARIANT FAR* URL){   // Check if glpDisp is NULL. If NULL, that means it is   // the top level NavigateComplete2. Save the LPDISPATCH   if (!glpDisp)      glpDisp = pDisp;}void CWebbrDlg::OnDocumentCompleteExplorer1(LPDISPATCH pDisp,                                            VARIANT FAR* URL){   if (glpDisp && glpDisp == pDisp)   {      // if the LPDISPATCH are same, that means      // it is the final DocumentComplete. Reset glpDisp      TRACE("Document is done downloading");      glpDisp = NULL;   }}				
DocumentComplete

Warnung: Dieser Artikel wurde automatisch übersetzt.

Eigenschaften

Artikelnummer: 180366 – Letzte Überarbeitung: 10/30/2012 01:42:00 – Revision: 4.0

  • kbhowto kbmt KB180366 KbMtde
Feedback