Τρόπος προσδιορισμού της όταν μια σελίδα είναι τέλος φόρτωση στο στοιχείο ελέγχου WebBrowser

Μεταφράσεις άρθρων Μεταφράσεις άρθρων
Αναγν. άρθρου: 180366
Ανάπτυξη όλων | Σύμπτυξη όλων

Περίληψη

Το στοιχείο ελέγχου του Internet Explorer WebBrowser fires το συμβάν DocumentComplete κατά την ολοκλήρωση της λήψης μιας σελίδας Web. Μπορείτε να δημιουργήσετε μια συνάρτηση χειρισμού συμβάντων της εφαρμογής σας για αυτό το συμβάν. Αυτό το άρθρο περιγράφει τα βήματα για να προσδιορίσετε αν μια το στοιχείο ελέγχου WebBrowser τελειώσει τη λήψη μιας ιστοσελίδας.

Περισσότερες πληροφορίες

Το στοιχείο ελέγχου WebBrowser fires το συμβάν DocumentComplete όταν αλλάζει η ιδιότητα ReadyState READYSTATE_COMPLETE. Αυτό υποδεικνύει ότι το στοιχείο ελέγχου WebBrowser έχει ολοκληρωθεί η λήψη της ιστοσελίδας. Ακολουθούν ορισμένα σημαντικά σημεία σχετικά με αυτό το συμβάν:
  • Στην περίπτωση της σελίδας με χωρίς πλαίσια, DocumentComplete ενεργοποιείται μία φορά μετά από ό, τι γίνεται.
  • Σε περίπτωση που τα πολλαπλά πλαίσια DocumentComplete λαμβάνει Πυροδοτείται πολλές φορές. Δεν κάθε καρέ fires αυτό το συμβάν, αλλά κάθε πλαισίου που fires ένα συμβάν DownloadBegin fires ένα αντίστοιχο συμβάν DocumentComplete.
  • Το συμβάν DocumentComplete έχει ένα IDispatch * παράμετρος, η οποία είναι το IDispatch του πλαισίου (shdocvw) για την οποία ενεργοποιείται DocumentComplete.
  • Στο πλαίσιο του ανώτατου επιπέδου fires το DocumentComplete στο τέλος. Έτσι, για να ελέγξετε εάν γίνεται μια σελίδα λήψης, θα πρέπει να ελέγξετε αν η παράμετρος IDispatch * είναι το ίδιο με το IDispatch του στοιχείου ελέγχου WebBrowser.

    Για τη Visual Basic, ακολουθεί ο κώδικας που εκτελεί έλεγχο αυτό:
    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
    					
Για να χειριστείτε το συμβάν DocumentComplete σε Visual C++ και να προσδιορίσετε αν έχει ολοκληρωθεί η λήψη της ιστοσελίδας, ακολουθήστε τα εξής βήματα.

Σημειώστε ότι τα βήματα που ακολουθείτε εξαρτάται από τον τρόπο που χρησιμοποιείτε το στοιχείο ελέγχου WebBrowser.
  • Εάν θέλετε να δημιουργήσετε το στοιχείο ελέγχου WebBrowser σε ένα αντικείμενο CWnd/CView, πρέπει να ακολουθήσετε τα βήματα 1 έως 4.
  • Εάν θέλετε να δημιουργήσετε το στοιχείο ελέγχου WebBrowser σε ένα αντικείμενο CDialog/CFormView, αρκεί να ακολουθήσετε το βήμα 4.
  • Εάν χρησιμοποιείτε την κλάση CHtmlView που παρέχονται με το Visual C++ 6.0, αντικατάσταση CHtmlView::DocumentComplete() και ακολουθήστε το βήμα 4, χρησιμοποιώντας το m_pBrowserApp μέλος της κλάσης CHtmlView για να αποκτήσετε πρόσβαση στο στοιχείο ελέγχου WebBrowser.
  1. Καθορίστε τη μέθοδο OnDocumentComplete στο αρχείο κεφαλίδας για την κλάση CWnd/CView-προκύπτει:
    afx_msg void OnDocumentComplete(LPDISPATCH lpDisp,
                                    VARIANT FAR* URL);
    					
  2. Δηλώστε το δέκτη συμβάντων στο ίδιο αρχείο κεφαλίδας:
    DECLARE_EVENTSINK_MAP()
    					
  3. Του αρχείου εφαρμογής (.cpp) για την κλάση CWnd/CView-προέρχεται, υλοποιεί το χάρτη δέκτης συμβάντων:
    BEGIN_EVENTSINK_MAP(CYourView, CView)
       ON_EVENT(CWBTstView, ID_WEB_BROWSE, 259 /* DocumentComplete */,
                OnDocumentComplete, VTS_DISPATCH VTS_PVARIANT)
    END_EVENTSINK_MAP()
    					
  4. Υλοποίηση της μεθόδου OnDocumentComplete:
    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();
    }
    					
Η προσέγγιση αυτή λειτουργεί όταν το στοιχείο ελέγχου WebBrowser που οδηγεί σε μια σελίδα η οποία αλλάζει το πλαίσιο ανώτατου επιπέδου. Ας υποθέσουμε ότι εάν παρουσιάζεται η περιήγηση μέσα σε ένα πλαίσιο, το ίδιο, τότε η τελική DocumentComplete που ενεργοποιείται είναι ότι το πλαίσιο και όχι στο πλαίσιο ανώτατου επιπέδου. Για παράδειγμα, εξετάστε το ακόλουθο σενάριο.

Το στοιχείο ελέγχου WebBrowser φιλοξενεί ένα σύνολο πλαισίων. Μέσα σε ένα πλαίσιο και το σύνολο πλαισίων, ο χρήστης κάνει κλικ σε μια σύνδεση που ανοίγει μια νέα σελίδα στο ίδιο πλαίσιο και διατηρεί ανέπαφα τα υπόλοιπα της ομάδας πλαισίων. Η νέα σελίδα θα μπορούσε να περιέχει πολλαπλά πλαίσια ξανά. Έτσι, θα υπάρχουν πολλές ειδοποιήσεις DocumentComplete (μία για κάθε νέο πλαίσιο). Ωστόσο, εφόσον δεν έχει αλλάξει το πλαίσιο ανώτατου επιπέδου, θα είναι η τελική DocumentComplete ότι του πλαισίου που έχει αλλάξει.

Εάν ενδιαφέρεστε να γίνεται έλεγχος για το τελικό έγγραφο ολοκλήρωσης σε αυτό το σενάριο, μπορούσατε να κάνετε τα εξής:
Ελέγξτε αν η παράμετρος IDispatch του το DocumentComplete είναι το ίδιο με την παράμετρο IDispatch του πρώτου συμβάντος NavigateComplete2. Εφόσον είναι το πρώτο NavigateComplete2 του πλαισίου του ανώτατου επιπέδου και το τελευταίο DocumentComplete είναι επίσης του πλαισίου του ανώτατου επιπέδου, κάνοντας μια σύγκριση με τέτοιο τρόπο θα σας ενημερώσει εάν έχει γίνει στη σελίδα λήψης.
Εδώ είναι ορισμένα δείγματα κώδικα C++:
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;
   }
}
				

Ιδιότητες

Αναγν. άρθρου: 180366 - Τελευταία αναθεώρηση: Σάββατο, 18 Δεκεμβρίου 2010 - Αναθεώρηση: 2.0
Λέξεις-κλειδιά: 
kbhowto kbmt KB180366 KbMtel
Μηχανικά μεταφρασμένο
ΣΗΜΑΝΤΙΚΟ: Αυτό το άρθρο είναι προϊόν λογισμικού μηχανικής μετάφρασης της Microsoft και όχι ανθρώπινης μετάφρασης. Η Microsoft σάς προσφέρει άρθρα που είναι προϊόντα ανθρώπινης αλλά και μηχανικής μετάφρασης έτσι ώστε να έχετε πρόσβαση σε όλα τα άρθρα της Γνωσιακής Βάσης μας στη δική σας γλώσσα. Ωστόσο, ένα άρθρο που έχει προκύψει από μηχανική μετάφραση δεν είναι πάντα άριστης ποιότητας. Ενδέχεται να περιέχει λεξιλογικά, συντακτικά ή γραμματικά λάθη, όπως ακριβώς τα λάθη που θα έκανε ένας μη φυσικός ομιλητής επιχειρώντας να μιλήσει τη γλώσσα σας. Η Microsoft δεν φέρει καμία ευθύνη για τυχόν ανακρίβειες, σφάλματα ή ζημίες που προκύψουν λόγω τυχόν παρερμηνειών στη μετάφραση του περιεχομένου ή χρήσης του από τους πελάτες της. Επίσης, η Microsoft πραγματοποιεί συχνά ενημερώσεις στο λογισμικό μηχανικής μετάφρασης.
Η αγγλική έκδοση αυτού του άρθρου είναι η ακόλουθη:180366
Αποποίηση ευθυνών για περιεχόμενο της Γνωσιακής Βάσης (KB) που έχει αποσυρθεί
This article was written about products for which Microsoft no longer offers support. Therefore, this article is offered "as is" and will no longer be updated.

Αποστολή σχολίων

 

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