Làm th? nào đ? xác đ?nh khi m?t trang đư?c th?c hi?n t?i trong ki?m soát WebBrowser

D?ch tiêu đ? D?ch tiêu đ?
ID c?a bài: 180366
Bung t?t c? | Thu g?n t?t c?

TÓM T?T

Đi?u khi?n Internet Explorer WebBrowser cháy các s? ki?n DocumentComplete khi nó đư?c hoàn t?t t?i m?t trang Web. B?n có th? t?o ra m?t b? x? l? s? ki?n ch?c năng trong ?ng d?ng c?a b?n cho s? ki?n này. Bài vi?t này mô t? các các bư?c đ? có đ? xác đ?nh n?u m?t ki?m soát WebBrowser hoàn thành t?i v? m?t trang Web.

THÔNG TIN THÊM

Ki?m soát WebBrowser cháy các s? ki?n DocumentComplete khi ReadyState c?a nó b?t đ?ng s?n đư?c thay đ?i đ? READYSTATE_COMPLETE. Đi?u này ch? ra r?ng các Ki?m soát WebBrowser đ? hoàn t?t t?i trang Web. Đây là m?t s? đi?m quan tr?ng liên quan đ?n s? ki?n này:
  • Trong trư?ng h?p c?a m?t trang v?i không có khung, DocumentComplete là b?n m?t l?n sau khi t?t c? m?i th? đư?c th?c hi?n.
  • Trong trư?ng h?p c?a nhi?u khung, DocumentComplete b? sa th?i nhi?u l?n. Không ph?i m?i khung cháy s? ki?n này, nhưng m?i khung cháy m?t DownloadBegin s? ki?n cháy m?t s? ki?n DocumentComplete tương ?ng.
  • S? ki?n này DocumentComplete có m?t tham s? IDispatch *, mà là các IDispatch c?a khung (shdocvw) mà DocumentComplete là b?n.
  • C?p cao khung cháy DocumentComplete cu?i cùng. V? v?y, đ? ki?m tra n?u m?t trang đư?c th?c hi?n t?i v?, b?n c?n ph?i ki?m tra n?u các IDispatch * tham s? là gi?ng như IDispatch ki?m soát WebBrowser.

    Cho Visual Basic, đây là m? th?c hi?n ki?m tra này:
    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
    					
X? l? s? ki?n DocumentComplete trong Visual C++ và xác đ?nh xem các t?i v? ph?n trang Web là hoàn toàn, làm theo các bư?c sau.

Lưu ? r?ng các bư?c b?n làm theo ph? thu?c vào cách b?n s? d?ng đi?u khi?n WebBrowser.
  • N?u b?n đang t?o đi?u khi?n WebBrowser trong m?t đ?i tư?ng CWnd/CView, b?n ph?i làm theo các bư?c 1 t?i 4.
  • N?u b?n đang t?o đi?u khi?n WebBrowser trong m?t đ?i tư?ng CDialog/CFormView, ch? c?n làm theo bư?c 4.
  • N?u b?n đang s? d?ng l?p CHtmlView đư?c cung c?p v?i Visual C++ 6.0, ghi đè lên CHtmlView::DocumentComplete() và làm theo bư?c 4, b?ng cách s? d?ng các m_pBrowserApp thành viên c?a CHtmlView l?p đ? truy c?p ki?m soát WebBrowser.
  1. Xác đ?nh phương pháp OnDocumentComplete trong các t?p tin tiêu đ? cho l?p h?c CWnd/CView-ngu?n g?c c?a b?n:
    afx_msg void OnDocumentComplete(LPDISPATCH lpDisp,
                                    VARIANT FAR* URL);
    					
  2. Tuyên b? s? ki?n ch?m trong cùng m?t t?p tin tiêu đ?:
    DECLARE_EVENTSINK_MAP()
    					
  3. Trong vi?c th?c hi?n file (.cpp) cho CWnd/CView-ngu?n g?c l?p c?a b?n, th?c hi?n các s? ki?n b?n r?a đ?:
    BEGIN_EVENTSINK_MAP(CYourView, CView)
       ON_EVENT(CWBTstView, ID_WEB_BROWSE, 259 /* DocumentComplete */,
                OnDocumentComplete, VTS_DISPATCH VTS_PVARIANT)
    END_EVENTSINK_MAP()
    					
  4. Th?c hi?n phương pháp 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();
    }
    					
Cách ti?p c?n này làm vi?c khi ki?m soát WebBrowser đi?u hư?ng đ?n m?t trang đó thay đ?i khung c?p cao nh?t. Nói n?u vi?c chuy?n hư?ng x?y ra trong m?t khung riêng c?a m?nh, sau đó DocumentComplete cu?i cùng là b?n là c?a khung và không ph?i là khung h?nh c?p cao nh?t. Ví d?, h?y xem xét k?ch b?n sau đây.

Ki?m soát WebBrowser là lưu tr? m?t frameset. Trong m?t khung c?a các FRAMESET, ngư?i dùng nh?p chu?t vào m?t liên k?t đó s? m? ra m?t trang m?i trong khung riêng c?a m?nh và gi? ph?n c?n l?i c?a frameset c?n nguyên v?n. Trang m?i có th? ch?a nhi?u khung m?t l?n n?a. V? v?y, s? có nhi?u DocumentComplete thông báo (m?t cho m?i khung m?i). Nhưng k? t? khi qu?c gia khung đ? không thay đ?i, DocumentComplete cu?i cùng s? là r?ng các khung có thay đ?i.

N?u b?n quan tâm đ?n vi?c ki?m tra tài li?u cu?i cùng hoàn thành ? đây k?ch b?n, b?n có th? th?c hi?n như sau:
Ki?m tra xem các thông s? IDispatch c?a DocumentComplete gi?ng như tham s? IDispatch c?a s? ki?n NavigateComplete2 đ?u tiên. K? t? khi các đ?u tiên NavigateComplete2 là khung c?p cao nh?t và cu?i cùng DocumentComplete c?ng c?a khung c?p cao nh?t, làm m?t so sánh th?i trang như v?y s? cho bi?t li?u trang đư?c th?c hi?n t?i.
Đây là m?t s? m?u C++ M?:
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;
   }
}
				

Thu?c tính

ID c?a bài: 180366 - L?n xem xét sau cùng: 20 Tháng Tám 2011 - Xem xét l?i: 2.0
T? khóa: 
kbhowto kbmt KB180366 KbMtvi
Máy d?ch
QUAN TRỌNG: Bài vi?t này đư?c d?ch b?ng ph?n m?m d?ch máy c?a Microsoft ch? không ph?i do con ngư?i d?ch. Microsoft cung c?p các bài vi?t do con ngư?i d?ch và c? các bài vi?t do máy d?ch đ? b?n có th? truy c?p vào t?t c? các bài vi?t trong Cơ s? Ki?n th?c c?a chúng tôi b?ng ngôn ng? c?a b?n. Tuy nhiên, bài vi?t do máy d?ch không ph?i lúc nào c?ng hoàn h?o. Lo?i bài vi?t này có th? ch?a các sai sót v? t? v?ng, cú pháp ho?c ng? pháp, gi?ng như m?t ngư?i nư?c ngoài có th? m?c sai sót khi nói ngôn ng? c?a b?n. Microsoft không ch?u trách nhi?m v? b?t k? s? thi?u chính xác, sai sót ho?c thi?t h?i nào do vi?c d?ch sai n?i dung ho?c do ho?t đ?ng s? d?ng c?a khách hàng gây ra. Microsoft c?ng thư?ng xuyên c?p nh?t ph?n m?m d?ch máy này.
Nh?p chu?t vào đây đ? xem b?n ti?ng Anh c?a bài vi?t này:180366
Khước từ Nội dung trong Cơ sở Kiến thức Không còn được hỗ trợ
Bài vi?t này nói v? các s?n ph?m mà Microsoft không c?n h? tr? n?a. Do đó, bài vi?t này đư?c cung c?p "nguyên b?n" và s? không đư?c c?p nh?t.

Cung cấp Phản hồi

 

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