Vasts tellen wanneer een pagina geladen in het WebBrowser-besturingselement wordt uitgevoerd

Vertaalde artikelen Vertaalde artikelen
Artikel ID: 180366
Alles uitklappen | Alles samenvouwen

Samenvatting

De Internet Explorer-webbrowserbesturingselement wordt de gebeurtenis DocumentComplete Wanneer het klaar is met downloaden van een webpagina. U kunt een gebeurtenis-handler maken functie in uw toepassing voor deze gebeurtenis. Dit artikel beschrijft de stappen te nemen om te bepalen of een element van de WebBrowser is voltooid het downloaden van een webpagina.

Meer informatie

De gebeurtenis DocumentComplete wordt door het besturings element WebBrowser wordt gestart wanneer de ReadyState eigenschap wordt gewijzigd in READYSTATE_COMPLETE. Dit geeft aan dat de WebBrowser-besturingselement in de webpagina is gedownload. Hier volgen enkele belangrijke punten met betrekking tot deze gebeurtenis:
  • In het geval van een pagina geen frames is DocumentComplete eenmaal geactiveerd Als alles klaar is.
  • In geval van meerdere frames DocumentComplete wordt meerdere keren wordt geactiveerd. Niet elk frame wordt deze gebeurtenis, maar elk frame dat wordt gestart een DownloadBegin-gebeurtenis een corresponderende gebeurtenis DocumentComplete wordt.
  • De gebeurtenis DocumentComplete heeft een IDispatch * parameter, die de IDispatch van het frame (shdocvw) waarvoor DocumentComplete wordt gestart.
  • Het bovenste frame de DocumentComplete uiteindelijk gestart. Dus Als een pagina wordt uitgevoerd controleren downloadt, moet u controleren of de Parameter IDispatch * komt overeen met de IDispatch van het besturings element WebBrowser.

    Dit is voor Visual Basic code die deze controle uitvoert:
    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
    					
De gebeurtenis DocumentComplete in Visual C++ en vast te stellen of de downloaden van de webpagina is voltooid, volgt u deze stappen.

Houd er rekening mee dat de stappen zijn afhankelijk van de manier waarop die u het besturings element WebBrowser gebruiken.
  • Als u het besturingselement in een object van CWnd/CView, maakt u Voer de stappen 1 tot en met 4.
  • Als u het besturings element WebBrowser in een object CDialog/CFormView maakt u hoeft alleen verder met stap 4.
  • Als u de CHtmlView klasse die met Visual C++ 6. 0 CHtmlView::DocumentComplete() negeren en volg stap 4, met de m_pBrowserApp lid van de klasse CHtmlView toegang te krijgen tot het besturings element WebBrowser.
  1. De methode OnDocumentComplete in het headerbestand voor uw CWnd/van CView afgeleide klasse definiëren:
    afx_msg void OnDocumentComplete(LPDISPATCH lpDisp,
                                    VARIANT FAR* URL);
    					
  2. Declareren de gebeurtenis-sink in hetzelfde headerbestand:
    DECLARE_EVENTSINK_MAP()
    					
  3. In het implementatie bestand (. cpp) voor uw CWnd/van CView afgeleide klasse de gebeurtenis-sink toewijzing implementeren:
    BEGIN_EVENTSINK_MAP(CYourView, CView)
       ON_EVENT(CWBTstView, ID_WEB_BROWSE, 259 /* DocumentComplete */,
                OnDocumentComplete, VTS_DISPATCH VTS_PVARIANT)
    END_EVENTSINK_MAP()
    					
  4. De methode OnDocumentComplete implementeren:
    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();
    }
    					
Deze benadering werkt wanneer het besturings element WebBrowser naar een pagina bladert die Hiermee wijzigt u het hoofd frame. Als de navigatie binnen een kader plaatsvindt dat zelf, wordt de uiteindelijke DocumentComplete die wordt gestart van het frame en niet op het hoofd frame. Neem bijvoorbeeld het volgende scenario.

Een frameset fungeert voor het besturings element WebBrowser. Binnen een kader van de frameset, de gebruiker klikt op een koppeling waarmee een nieuwe pagina geopend in het frame zelf en de rest van de frameset intact blijft. Kan de nieuwe pagina bevatten meerdere frames opnieuw. Dus zullen er meerdere DocumentComplete meldingen (één voor elk nieuw frame). Maar omdat het hoofd frame niet gewijzigd, zou de uiteindelijke DocumentComplete zijn dat van het frame dat is gewijzigd.

Als u geïnteresseerd bent in controle voor het uiteindelijke document volledig in deze scenario, u kan het volgende doen:
Controleer of de IDispatch-parameter van de DocumentComplete hetzelfde als is de IDispatch-parameter van de eerste NavigateComplete2-gebeurtenis. Aangezien de eerste NavigateComplete2 is van het hoofd frame en de laatste DocumentComplete is ook van het frame op het hoogste niveau een vergelijking in doen een dergelijke manier zien of de pagina wordt gedaan downloaden.
Hier is sommige C++ voorbeeldcode:
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;
   }
}
				

Eigenschappen

Artikel ID: 180366 - Laatste beoordeling: vrijdag 25 februari 2011 - Wijziging: 2.0
Trefwoorden: 
kbhowto kbmt KB180366 KbMtnl
Automatisch vertaald artikel
BELANGRIJK: Dit artikel is vertaald door de vertaalmachine software van Microsoft in plaats van door een professionele vertaler. Microsoft biedt u professioneel vertaalde artikelen en artikelen vertaald door de vertaalmachine, zodat u toegang heeft tot al onze knowledge base artikelen in uw eigen taal. Artikelen vertaald door de vertaalmachine zijn niet altijd perfect vertaald. Deze artikelen kunnen fouten bevatten in de vocabulaire, zinsopbouw en grammatica en kunnen lijken op hoe een anderstalige de taal spreekt en schrijft. Microsoft is niet verantwoordelijk voor onnauwkeurigheden, fouten en schade ontstaan door een incorrecte vertaling van de content of het gebruik ervan door onze klanten. Microsoft past continue de kwaliteit van de vertaalmachine software aan door deze te updaten.
De Engelstalige versie van dit artikel is de volgende:180366
Vrijwaring inhoud KB-artikelen over niet langer ondersteunde producten
Dit artikel heeft betrekking op producten waarvoor Microsoft geen ondersteuning meer biedt. Daarom wordt dit artikel alleen in de huidige vorm aangeboden en wordt het niet meer bijgewerkt.

Geef ons feedback

 

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