Como determinar quando uma página é concluída o carregamento no controle WebBrowser

Traduções deste artigo Traduções deste artigo
ID do artigo: 180366 - Exibir os produtos aos quais esse artigo se aplica.
Expandir tudo | Recolher tudo

Sumário

O controle WebBrowser do Internet Explorer aciona o evento DocumentComplete quando ele for concluído o download de uma página da Web. Você pode criar uma função de manipulador de eventos em seu aplicativo para este evento. Este artigo descreve as etapas sejam determinar se um controle WebBrowser for concluído download de uma página da Web.

Mais Informações

O controle WebBrowser aciona o evento DocumentComplete quando sua propriedade ReadyState é alterada para READYSTATE_COMPLETE. Isso indica que o controle WebBrowser foi concluída baixando a página da Web. Aqui estão alguns pontos importantes sobre este evento:
  • No caso de uma página com sem quadros, DocumentComplete é acionado uma vez após a conclusão da tudo.
  • No caso de vários quadros, DocumentComplete obtém acionado várias vezes. Este evento é acionado não todos os quadros, mas cada quadro que dispara um evento DownloadBegin dispara um evento DocumentComplete correspondente.
  • O evento DocumentComplete tem um parâmetro IDispatch 1, que é o IDispatch do quadro (shdocvw) para o qual DocumentComplete é acionado.
  • Quadro de nível superior é acionado DocumentComplete no final. Caso, para verificar se uma página é feita download, você precisa verificar se o parâmetro IDispatch 1 é mesmo o IDispatch do controle WebBrowser.

    Para o Visual Basic, eis o código que executa essa verificação:
    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 manipular o evento DocumentComplete no Visual C++ e determinar se o download da página da Web for concluído, execute estas etapas.

Observe que as etapas que você seguir dependem da forma que você usa o controle WebBrowser.
  • Se você estiver criando o controle WebBrowser em um objeto CWnd/CView, você deve seguir as etapas 1 a 4.
  • Se você estiver criando o controle WebBrowser em um objeto CDialog/CFormView, só precisará seguir a etapa 4.
  • Se você estiver usando a classe CHtmlView fornecida com o Visual C++ 6.0, substituir CHtmlView::DocumentComplete() e siga a etapa 4, usando o membro m_pBrowserApp da classe CHtmlView para acessar o controle WebBrowser.
  1. Definir o método OnDocumentComplete no arquivo de cabeçalho para sua classe derivada CWnd/CView:
    afx_msg void OnDocumentComplete(LPDISPATCH lpDisp,
                                    VARIANT FAR* URL);
    					
  2. Declarar o coletor de eventos no mesmo arquivo de cabeçalho:
    DECLARE_EVENTSINK_MAP()
    					
  3. No arquivo de implementação (.cpp) para sua classe derivada CWnd/CView, implementar o mapa de coletor de evento:
    BEGIN_EVENTSINK_MAP(CYourView, CView)
       ON_EVENT(CWBTstView, ID_WEB_BROWSE, 259 /* DocumentComplete */,
                OnDocumentComplete, VTS_DISPATCH VTS_PVARIANT)
    END_EVENTSINK_MAP()
    					
  4. Implementar o 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();
    }
    					
Essa abordagem funciona quando o controle WebBrowser navega para uma página que altera o quadro de nível superior. Digamos que se a navegação ocorre dentro de um quadro propriamente dito, então o DocumentComplete final é acionado é que o quadro e não o quadro de nível superior. Por exemplo, considere o cenário a seguir.

O controle WebBrowser está hospedando um conjunto de quadros. Dentro de uma moldura do conjunto de quadros, o usuário clica em um link que abre uma nova página no quadro propriamente dito e mantém o resto do conjunto de quadros intactos. A nova página pode conter vários quadros novamente. Portanto, não haverá várias notificações DocumentComplete (um para cada novo quadro). Mas, como quadro de nível superior não mudou, DocumentComplete final seria que do quadro que foi alterado.

Se você estiver interessado na verificação para o final do documento concluída nesse cenário, você poderia fazer o seguinte:
Verifique se o parâmetro de IDispatch do DocumentComplete é o mesmo parâmetro de evento NavigateComplete2 primeiro IDispatch. Como é NavigateComplete2 primeiro do quadro de nível superior e o último DocumentComplete também é do quadro de nível superior, fazer uma comparação de tal forma irá informar se a página é feita download.
Eis alguns códigos C++ de exemplo:
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;
   }
}
				

Propriedades

ID do artigo: 180366 - Última revisão: quinta-feira, 1 de julho de 2004 - Revisão: 2.1
A informação contida neste artigo aplica-se a:
  • Microsoft Internet Explorer 4.0 Edição de 128 Bits
  • Microsoft Internet Explorer 4.01 Service Pack 2
  • Microsoft Internet Explorer 5.0
  • Microsoft Internet Explorer 5.5
Palavras-chave: 
kbmt kbhowto KB180366 KbMtpt
Tradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 180366
Aviso de Isenção de Responsabilidade sobre Conteúdo do KB Aposentado
Este artigo trata de produtos para os quais a Microsoft não mais oferece suporte. Por esta razão, este artigo é oferecido "como está" e não será mais atualizado.

Submeter comentários

 

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