Bạn hiện đang ngoại tuyến, hãy chờ internet để kết nối lại

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

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.
TÓM TẮT
Điều khiển Internet Explorer WebBrowser cháy các sự kiện DocumentCompletekhi 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ệnchứ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áccác bước để có để xác định nếu một kiểm soát WebBrowser hoàn thànhtả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ácKiể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 IfEnd Sub					
Xử lý sự kiện DocumentComplete trong Visual C++ và xác định xem cáctả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ạnphả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ácm_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 khungriêng của mình, sau đó DocumentComplete cuối cùng là bắn là của khungvà 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ácFRAMESET, 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 khungriê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 DocumentCompletethô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 ở đâykị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 eventvoid 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;   }}				
DocumentComplete

Cảnh báo: Bài viết này đã được dịch tự động

Thuộc tính

ID Bài viết: 180366 - Xem lại Lần cuối: 08/20/2011 06:23:00 - Bản sửa đổi: 2.0

  • kbhowto kbmt KB180366 KbMtvi
Phản hồi