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

SPRACHE AUSWÄHLEN SPRACHE AUSWÄHLEN
Artikel-ID: 180366
Alles erweitern | Alles schließen

Zusammenfassung

Internet Explorer-WebBrowser-Steuerelement löst das Ereignis DocumentComplete nach Beendigung eine Webseite herunterladen. Sie können einen Ereignishandler erstellen. Funktion in der Anwendung für dieses Ereignis. Dieser Artikel beschreibt die Schritte zum Ermitteln, ob ein WebBrowser-Steuerelement ist abgeschlossen Herunterladen einer Webseite.

Weitere Informationen

Das WebBrowser-Steuerelement löst das Ereignis DocumentComplete bei seiner ReadyState Eigenschaft ist in READYSTATE_COMPLETE geändert. Dies weist darauf hin, dass die WebBrowser-Steuerelement ist abgeschlossen die Webseite herunterladen. Hier sind einige wichtige 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 If
    End Sub
    					
Behandeln Sie das Ereignis "DocumentComplete" in Visual C++, und prüfen Sie, ob die Download 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 Sie Fü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 der M_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 auftritt selbst ist dann die endgültige DocumentComplete, das ausgelöst wird, des Rahmens und nicht der oberste Frame. Betrachten Sie beispielsweise das folgende Szenario.

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

Wenn Sie das vollständig in das endgültige Dokument überprüfen möchten Szenario 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 event
void 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;
   }
}
				

Eigenschaften

Artikel-ID: 180366 - Geändert am: Dienstag, 30. Oktober 2012 - Version: 4.0
Keywords: 
kbhowto kbmt KB180366 KbMtde
Maschinell übersetzter Artikel
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
Microsoft stellt Ihnen die in der Knowledge Base angebotenen Artikel und Informationen als Service-Leistung zur Verfügung. Microsoft übernimmt keinerlei Gewährleistung dafür, dass die angebotenen Artikel und Informationen auch in Ihrer Einsatzumgebung die erwünschten Ergebnisse erzielen. Die Entscheidung darüber, ob und in welcher Form Sie die angebotenen Artikel und Informationen nutzen, liegt daher allein bei Ihnen. Mit Ausnahme der gesetzlichen Haftung für Vorsatz ist jede Haftung von Microsoft im Zusammenhang mit Ihrer Nutzung dieser Artikel oder Informationen ausgeschlossen.
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.

Ihr Feedback an uns

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com