Come determinare quando una pagina Ŕ eseguita il caricamento nel controllo WebBrowser

Traduzione articoli Traduzione articoli
Identificativo articolo: 180366 - Visualizza i prodotti a cui si riferisce l?articolo.
Espandi tutto | Chiudi tutto

Sommario

Il controllo di WebBrowser di Internet Explorer genera l'evento DocumentComplete termine una pagina Web di download. ╚ possibile creare una funzione del gestore eventi nell'applicazione per l'evento. Questo articolo viene descritta la procedura per determinare se un termine del controllo WebBrowser download di una pagina Web.

Informazioni

Il controllo di WebBrowser genera l'evento DocumentComplete quando la proprietÓ ReadyState viene modificata per READYSTATE_COMPLETE. Questo indica che Ŕ stata completata la pagina Web di download del controllo WebBrowser. Ecco alcuni punti importanti relative a questo evento:
  • Nel caso di una pagina con frame non DocumentComplete viene generato una volta dopo tutti gli elementi.
  • In caso di pi¨ frame, DocumentComplete ottiene generato pi¨ volte. Non tutti i frame genera questo evento, ma ogni frame che viene generato un evento DownloadBegin viene generato un evento DocumentComplete corrispondente.
  • L'evento DocumentComplete ha un parametro IDispatch *, ovvero della cornice (shdocvw) per il quale viene generato DocumentComplete IDispatch.
  • La cornice di primo livello viene generato il DocumentComplete alla fine. In tal caso, per verificare se viene eseguita una pagina Download, Ŕ necessario verificare se il parametro IDispatch * Ŕ come IDispatch del controllo WebBrowser.

    Per Visual Basic, Ŕ qui un codice che esegue questo controllo:
    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
    					
Per gestire l'evento DocumentComplete in Visual c ++ e determinare se il download della pagina Web Ŕ completato, attenersi alla seguente procedura.

Si noti che i passaggi dipendono la modalitÓ di che utilizzo del controllo WebBrowser.
  • Se si sta creando il controllo WebBrowser in un oggetto CWnd/CView, Ŕ necessario seguire i passaggi da 1 a 4.
  • Se si sta creando il controllo WebBrowser in un oggetto CDialog/CFormView, sufficiente eseguire il passaggio 4.
  • Se si utilizza la classe CHtmlView fornita con Visual c ++ 6.0, eseguire l'override CHtmlView::DocumentComplete() e seguire di passaggio 4, utilizzando il membro di m_pBrowserApp della classe CHtmlView per accedere al controllo WebBrowser.
  1. Definire il metodo di OnDocumentComplete nel file di intestazione per la classe derivata CWnd/CView:
    afx_msg void OnDocumentComplete(LPDISPATCH lpDisp,
                                    VARIANT FAR* URL);
    					
  2. Dichiarare il sink di evento nello stesso file di intestazione:
    DECLARE_EVENTSINK_MAP()
    					
  3. Nel file di implementazione (CPP) per la classe derivata CWnd/CView, implementare il mappa del sink di eventi:
    BEGIN_EVENTSINK_MAP(CYourView, CView)
       ON_EVENT(CWBTstView, ID_WEB_BROWSE, 259 /* DocumentComplete */,
                OnDocumentComplete, VTS_DISPATCH VTS_PVARIANT)
    END_EVENTSINK_MAP()
    					
  4. Implementare il metodo 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();
    }
    					
Questo approccio funziona quando il controllo WebBrowser passa a una pagina che viene modificato il frame principale. Ad esempio se si verifica lo spostamento all'interno di un frame stesso, quindi il DocumentComplete finale generato Ŕ la cornice e non nel frame principale. Si consideri ad esempio, nello scenario riportato di seguito.

Il controllo WebBrowser sta ospitando una pagina con frame. All'interno di un frame della pagina con frame, l'utente fa clic su un collegamento che viene visualizzata una nuova pagina nel frame stesso e mantiene intatti il resto della pagina con frame. La nuova pagina potrebbe contenere pi¨ frame nuovamente. In questo modo, sarÓ necessario pi¨ notifiche DocumentComplete (uno per ogni nuovo frame). Ma, poichÚ non Ŕ modificata la cornice di primo livello, il DocumentComplete finale sarebbe che del frame che Ŕ stato modificato.

Se si desidera verificare per il documento finale completo in questo scenario, Ŕ Impossibile effettuare le seguenti operazioni:
Verificare se il parametro di IDispatch del DocumentComplete Ŕ lo stesso parametro di primo evento NavigateComplete2 IDispatch. PoichÚ il primo NavigateComplete2 Ŕ della cornice di primo livello e l'ultima DocumentComplete Ŕ anche della cornice di primo livello, eseguire un confronto in un modo indicherÓ se viene eseguita la pagina Download.
Qui Ŕ del codice di c ++ di esempio:
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;
   }
}
				

ProprietÓ

Identificativo articolo: 180366 - Ultima modifica: giovedý 1 luglio 2004 - Revisione: 2.1
Le informazioni in questo articolo si applicano 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
Chiavi:á
kbmt kbhowto KB180366 KbMtit
Traduzione automatica articoli
Il presente articolo Ŕ stato tradotto tramite il software di traduzione automatica di Microsoft e non da una persona. Microsoft offre sia articoli tradotti da persone fisiche sia articoli tradotti automaticamente da un software, in modo da rendere disponibili tutti gli articoli presenti nella nostra Knowledge Base nella lingua madre dell?utente. Tuttavia, un articolo tradotto in modo automatico non Ŕ sempre perfetto. Potrebbe contenere errori di sintassi, di grammatica o di utilizzo dei vocaboli, pi¨ o meno allo stesso modo di come una persona straniera potrebbe commettere degli errori parlando una lingua che non Ŕ la sua. Microsoft non Ŕ responsabile di alcuna imprecisione, errore o danno cagionato da qualsiasi traduzione non corretta dei contenuti o dell?utilizzo degli stessi fatto dai propri clienti. Microsoft, inoltre, aggiorna frequentemente il software di traduzione automatica.
Clicca qui per visualizzare la versione originale in inglese dell?articolo: 180366
LE INFORMAZIONI CONTENUTE NELLA MICROSOFT KNOWLEDGE BASE SONO FORNITE SENZA GARANZIA DI ALCUN TIPO, IMPLICITA OD ESPLICITA, COMPRESA QUELLA RIGUARDO ALLA COMMERCIALIZZAZIONE E/O COMPATIBILITA' IN IMPIEGHI PARTICOLARI. L'UTENTE SI ASSUME L'INTERA RESPONSABILITA' PER L'UTILIZZO DI QUESTE INFORMAZIONI. IN NESSUN CASO MICROSOFT CORPORATION E I SUOI FORNITORI SI RENDONO RESPONSABILI PER DANNI DIRETTI, INDIRETTI O ACCIDENTALI CHE POSSANO PROVOCARE PERDITA DI DENARO O DI DATI, ANCHE SE MICROSOFT O I SUOI FORNITORI FOSSERO STATI AVVISATI. IL DOCUMENTO PUO' ESSERE COPIATO E DISTRIBUITO ALLE SEGUENTI CONDIZIONI: 1) IL TESTO DEVE ESSERE COPIATO INTEGRALMENTE E TUTTE LE PAGINE DEVONO ESSERE INCLUSE. 2) I PROGRAMMI SE PRESENTI, DEVONO ESSERE COPIATI SENZA MODIFICHE, 3) IL DOCUMENTO DEVE ESSERE DISTRIBUITO INTERAMENTE IN OGNI SUA PARTE. 4) IL DOCUMENTO NON PUO' ESSERE DISTRIBUITO A SCOPO DI LUCRO.
Dichiarazione di non responsabilitÓ per articoli della Microsoft Knowledge Base su prodotti non pi¨ supportati
Questo articolo Ŕ stato scritto sui prodotti per cui Microsoft non offre pi¨ supporto. L?articolo, quindi, viene offerto ?cosý come Ŕ? e non verrÓ pi¨ aggiornato.

Invia suggerimenti

 

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