Cómo determinar si una página es terminada carga en el Control WebBrowser

Seleccione idioma Seleccione idioma
Id. de artículo: 180366 - Ver los productos a los que se aplica este artículo
Expandir todo | Contraer todo

Resumen

El control WebBrowser de Internet Explorer desencadena el evento DocumentComplete cuando haya terminado la descarga de una página Web. Puede crear una función de controlador de eventos en la aplicación para este evento. En este artículo describe los pasos para tomar en determinar si un finalizada el control WebBrowser descargando una página Web.

Más información

El control WebBrowser desencadena el evento de DocumentComplete cuando su propiedad ReadyState cambia a READYSTATE_COMPLETE. Esto indica que el control WebBrowser ha completado la descarga de la página Web. Estos son algunos puntos importantes acerca de este evento:
  • En el caso de una página sin marcos, DocumentComplete se desencadena una vez después de todo.
  • En caso de varios marcos, DocumentComplete obtiene desencadena varias veces. No todas las tramas desencadena este evento, pero cada trama que desencadena un evento DownloadBegin desencadena un evento DocumentComplete correspondiente.
  • El evento DocumentComplete tiene un parámetro de IDispatch *, que es la interfaz IDispatch del marco (shdocvw) para el que se desencadena DocumentComplete.
  • El marco de nivel superior desencadena DocumentComplete al final. Es así, para comprobar si se realiza una página de descarga, tiene que comprobar si el parámetro IDispatch * es igual a la interfaz IDispatch del control WebBrowser.

    Para Visual Basic, es aquí el código que realiza esta comprobación:
    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
    					
Para controlar el evento DocumentComplete en C++ y determinar si se ha completado la descarga de la página Web, siga estos pasos.

Tenga en cuenta que los pasos que seguir dependen de la forma que utiliza el control WebBrowser.
  • Si va a crear el control WebBrowser en un objeto CWnd y CView, debe seguir los pasos 1 a 4.
  • Si está creando el control WebBrowser en un objeto CFormView o CDialog, sólo debe seguir el paso 4.
  • Si está utilizando la clase de CHtmlView proporcionada con Visual C++ 6.0, reemplazar CHtmlView::DocumentComplete() y siga el paso 4, utilizando al miembro m_pBrowserApp de la clase de CHtmlView para tener acceso el control WebBrowser.
  1. Define el método OnDocumentComplete en el archivo de encabezado de la clase derivada CWnd y CView:
    afx_msg void OnDocumentComplete(LPDISPATCH lpDisp,
                                    VARIANT FAR* URL);
    					
  2. Declarar el receptor de sucesos en el mismo archivo de encabezado:
    DECLARE_EVENTSINK_MAP()
    					
  3. En el archivo de implementación (.cpp) de la clase derivada de CWnd y CView, implemente el mapa de receptores de eventos:
    BEGIN_EVENTSINK_MAP(CYourView, CView)
       ON_EVENT(CWBTstView, ID_WEB_BROWSE, 259 /* DocumentComplete */,
                OnDocumentComplete, VTS_DISPATCH VTS_PVARIANT)
    END_EVENTSINK_MAP()
    					
  4. Implemente el método 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();
    }
    					
Este enfoque funciona cuando el control WebBrowser va a una página que cambia el marco de nivel superior. Diga si la exploración se produce en un marco en Sí, entonces el DocumentComplete final que se desencadena es que el marco y no el marco de nivel superior. Por ejemplo, considere la situación siguiente.

El control WebBrowser aloja un conjunto de marcos. Dentro de un marco del conjunto de marcos, el usuario hace clic en un vínculo que abre una página nueva en el marco en Sí y se mantiene intacto el resto del conjunto de marcos. La nueva página podría contener varios marcos de nuevo. Por lo tanto, habrá varias notificaciones DocumentComplete (uno para cada nuevo marco). Pero, dado que no ha cambiado el marco de nivel superior, el final DocumentComplete sería que del marco que ha cambiado.

Si está interesado en la comprobación para el documento final completado en este escenario, se podría hacer lo siguiente:
Compruebe si el parámetro IDispatch de la DocumentComplete es igual que el parámetro de IDispatch del primer evento NavigateComplete2. Puesto que es el primer NavigateComplete2 del marco de nivel superior y el último DocumentComplete también es el marco de nivel superior, realizar una comparación de tal forma indicará si se realiza la página de descarga.
Éste es el código de C++ de ejemplo:
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;
   }
}
				

Propiedades

Id. de artículo: 180366 - Última revisión: jueves, 01 de julio de 2004 - Versión: 2.1
La información de este artículo se refiere a:
  • Microsoft Internet Explorer 4.0 128-Bit Edition
  • Microsoft Internet Explorer 4.01 Service Pack 2
  • Microsoft Internet Explorer 5.0
  • Microsoft Internet Explorer 5.5
Palabras clave: 
kbmt kbhowto KB180366 KbMtes
Traducción automática
IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.
Haga clic aquí para ver el artículo original (en inglés): 180366
Renuncia a responsabilidad de los contenidos de la KB sobre productos a los que ya no se ofrece asistencia alguna
El presente artículo se escribió para productos para los que Microsoft ya no ofrece soporte técnico. Por tanto, el presente artículo se ofrece "tal cual" y no será actualizado.

Enviar comentarios

 

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