Jak lze zjistit na stránce při dokončení načítání do ovládacího prvku WebBrowser

Překlady článku Překlady článku
ID článku: 180366
Rozbalit všechny záložky | Minimalizovat všechny záložky

Souhrn

Ovládací prvek Internet Explorer WebBrowser dojde k události DocumentComplete Po dokončení stahování webové stránky. Můžete vytvořit obslužnou rutinu události funkce v aplikaci pro tuto událost. Tento článek popisuje, Postup při určování, zda ovládací prvek WebBrowser je dokončena. stahování webové stránky.

Další informace

Ovládací prvek WebBrowser dojde k události DocumentComplete při jeho ReadyState Vlastnost se změní na READYSTATE_COMPLETE. To znamená, že Ovládací prvek WebBrowser dokončil stahování webové stránky. Zde jsou některé důležité body týkající se této události:
  • V souvislosti bez rámců na stránce DocumentComplete je aktivována jednou poté, co všechno je Hotovo.
  • V případě z více snímků získá DocumentComplete aktivována vícekrát. Ne každý snímek dojde k této události, ale každý snímek, který je Odpovídající události DocumentComplete dojde k události DownloadBegin.
  • Událost DocumentComplete má IDispatch * parametr, který je Chcete-li rozhraní IDispatch rámce (shdocvw), pro které je aktivována, DocumentComplete.
  • Rámec nejvyšší úrovně je DocumentComplete do konce. Ano, Kontrola, pokud se provádí na stránce stažení, potřebujete-li Rozhraní IDispatch * parametr je stejné jako rozhraní IDispatch ovládacího prvku WebBrowser.

    V jazyce Visual Basic zde je kód, který provede kontrola:
    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
    					
Ke zpracování události DocumentComplete v jazyce C++ a zjistit, zda Po dokončení stahování webové stránky, postupujte následujícím způsobem.

Všimněte si, že budete postupovat podle kroků závisí na způsobu, jakým používáte ovládací prvek WebBrowser.
  • Pokud vytvoříte ovládací prvek WebBrowser v objektu CWnd a CView, které postupujte podle kroků 1 až 4.
  • Pokud vytvoříte ovládací prvek WebBrowser v objektu CDialog a CFormView, Stačí postupovat podle kroku 4.
  • Používáte-li třída CHtmlView s Visual C++ 6.0 přepsat CHtmlView::DocumentComplete() a postupujte podle kroku 4, použití člen m_pBrowserApp třídy CHtmlView přístup k ovládacím prvku WebBrowser.
  1. V záhlaví souboru CWnd, CView odvozené třídy definujte metodu OnDocumentComplete:
    afx_msg void OnDocumentComplete(LPDISPATCH lpDisp,
                                    VARIANT FAR* URL);
    					
  2. Prohlašuji, že jímky událostí ve stejném souboru záhlaví:
    DECLARE_EVENTSINK_MAP()
    					
  3. V implementačním souboru (CPP) CWnd, CView odvozené třídy, implementovat mapa jímky událostí:
    BEGIN_EVENTSINK_MAP(CYourView, CView)
       ON_EVENT(CWBTstView, ID_WEB_BROWSE, 259 /* DocumentComplete */,
                OnDocumentComplete, VTS_DISPATCH VTS_PVARIANT)
    END_EVENTSINK_MAP()
    					
  4. Implementace metody 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();
    }
    					
Tento postup je vhodný v případě, že ovládací prvek WebBrowser přejde na stránku, změní rámec nejvyšší úrovně. Řekněte, pokud dojde k navigaci v rámci sám pak konečný DocumentComplete, která je aktivována, je, že rámce a není rámec nejvyšší úrovně. Například zvažte následující scénář.

Ovládací prvek WebBrowser je hostitelem rámců. V rámci jednoho snímku Sada rámců, uživatel klepne na odkaz, který otevře novou stránku v rámci samotné a ponechá beze změny zbývající sady rámců. Nové stránky nelze znovu obsahují více rámců. Proto bude existovat více DocumentComplete oznámení (jeden pro každý nový snímek). Ale protože má rámec nejvyšší úrovně nezmění, konečný DocumentComplete by že rámce, který má změnit.

Pokud máte zájem o kontrole konečném dokončení v tomto dokumentu scénář, může postupovat takto:
Zkontrolovat, zda parametr IDispatch DocumentComplete je stejná jako Parametr IDispatch první událost NavigateComplete2. Protože první NavigateComplete2 je rámec nejvyšší úrovně a poslední DocumentComplete také nejvyšší úrovně rámce, dělá srovnání takovým způsobem, bude informovat, zda se provádí na stránce stažení.
Zde je ukázkový kód jazyka 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;
   }
}
				

Vlastnosti

ID článku: 180366 - Poslední aktualizace: 23. dubna 2011 - Revize: 4.0
Klíčová slova: 
kbhowto kbmt KB180366 KbMtcs
Strojově přeložený článek
Důležité: Tento článek byl přeložen pomocí software společnosti Microsoft na strojový překlad, ne profesionálním překladatelem. Společnost Microsoft nabízí jak články přeložené překladatelem, tak články přeložené pomocí software na strojový překlad, takže všechny články ve Znalostní databázi (Knowledge Base) jsou dostupné v češtině. Překlad pomocí software na strojový překlad ale není bohužel vždy dokonalý. Obsahuje chyby ve skloňování slov, skladbě vět, nebo gramatice, podobně jako když cizinci dělají chyby při mluvení v češtině. Společnost Microsoft není právně zodpovědná za nepřesnosti, chyby nebo škody vzniklé chybami v překladu, nebo při použití nepřesně přeložených instrukcí v článku zákazníkem. Společnost Microsoft aktualizuje software na strojový překlad, aby byl počet chyb omezen na minimum.
Projděte si také anglickou verzi článku:180366
Právní omezení pro obsah znalostní báze týkající se produktů, jejichž podpora byla ukončena
Tento článek byl napsán o produktech, pro které společnost Microsoft již neposkytuje nadále podporu. Článek je tedy nabízen v takovém stavu, v jakém je, a nebude již nadále aktualizován.

Dejte nám zpětnou vazbu

 

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