Cara menentukan ketika halaman dilakukan Loading di kontrol browser web

Terjemahan Artikel Terjemahan Artikel
ID Artikel: 180366
Perbesar semua | Perkecil semua

RINGKASAN

Internet Explorer WebBrowser pengendalian kebakaran acara DocumentComplete Bila telah selesai men-download halaman Web. Anda dapat membuat event handler fungsi dalam aplikasi Anda untuk acara ini. Artikel ini menjelaskan langkah-langkah untuk mengambil dalam menentukan jika browser web kontrol selesai men-download halaman Web.

INFORMASI LEBIH LANJUT

Kontrol browser web DocumentComplete event kebakaran ketika ReadyState yang properti berubah menjadi READYSTATE_COMPLETE. Ini menunjukkan bahwa Browser web kontrol telah menyelesaikan download halaman Web. Berikut adalah beberapa poin penting mengenai acara ini:
  • Dari halaman berbingkai tidak, DocumentComplete ini dipecat sekali Setelah semuanya dilakukan.
  • Kasus dari beberapa frame, DocumentComplete dipecat beberapa kali. Tidak setiap bingkai kebakaran acara ini, tapi setiap bingkai yang kebakaran DownloadBegin peristiwa kebakaran acara DocumentComplete sesuai.
  • Acara DocumentComplete memiliki IDispatch * parameter, yang IDispatch bingkai (shdocvw) yang DocumentComplete dipecat.
  • Bingkai top-level kebakaran DocumentComplete pada akhirnya. Jadi, untuk memeriksa jika halaman selesai men-download, Anda perlu memeriksa jika IDispatch * parameter sama sebagai IDispatch kontrol browser web.

    Untuk Visual Basic, di sini adalah kode yang melakukan ini memeriksa:
    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
    					
Untuk menangani peristiwa DocumentComplete in Visual C++ dan menentukan jika download halaman Web lengkap, ikuti langkah berikut ini.

Perhatikan bahwa langkah-langkah yang Anda ikuti tergantung pada cara Anda menggunakan kontrol browser web.
  • Jika Anda membuat kontrol browser web di CWnd/CView objek, Anda harus ikuti langkah 1-4.
  • Jika Anda membuat kontrol browser web di objek CDialog/CFormView hanya perlu mengikuti langkah 4.
  • Jika Anda menggunakan CHtmlView kelas yang disediakan dengan Visual C++ 6.0 mengesampingkan CHtmlView::DocumentComplete() dan ikuti langkah 4, menggunakan m_pBrowserApp anggota kelas CHtmlView untuk mengakses kontrol browser web.
  1. Menentukan metode OnDocumentComplete dalam file header untuk kelas CWnd/CView-berasal Anda:
    afx_msg void OnDocumentComplete(LPDISPATCH lpDisp,
                                    VARIANT FAR* URL);
    					
  2. Menyatakan peristiwa tenggelam dalam file header yang sama:
    DECLARE_EVENTSINK_MAP()
    					
  3. Dalam pelaksanaan file (.cpp) untuk kelas Anda CWnd/CView-berasal, menerapkan peta wastafel acara:
    BEGIN_EVENTSINK_MAP(CYourView, CView)
       ON_EVENT(CWBTstView, ID_WEB_BROWSE, 259 /* DocumentComplete */,
                OnDocumentComplete, VTS_DISPATCH VTS_PVARIANT)
    END_EVENTSINK_MAP()
    					
  4. Menerapkan metode yang 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();
    }
    					
Pendekatan ini bekerja ketika kontrol browser web menavigasi ke halaman yang Perubahan tingkat atas bingkai. Mengatakan jika navigasi terjadi dalam bingkai itu sendiri, kemudian DocumentComplete akhir yang ditembakkan adalah bahwa bingkai dan tidak top-level bingkai. Sebagai contoh, perhatikan skenario berikut.

Kontrol browser web hosting frameset. Dalam satu frame bingkai, maka pengguna mengklik link yang akan membuka halaman baru dalam bingkai itu sendiri dan membuat seluruh rangkaian bingkai utuh. Halaman baru bisa berisi beberapa frame lagi. Jadi, akan ada beberapa DocumentComplete pemberitahuan (satu untuk setiap frame baru). Tapi, karena top-level frame memiliki tidak berubah, DocumentComplete akhir akan bahwa bingkai yang telah berubah.

Jika Anda tertarik dalam memeriksa untuk akhir dokumen lengkap dalam hal ini skenario, Anda dapat melakukan hal berikut:
Periksa Jika parameter IDispatch DocumentComplete adalah sama dengan parameter IDispatch pertama NavigateComplete2 acara. Karena NavigateComplete2 pertama adalah top-level frame dan terakhir DocumentComplete juga bingkai top-level, melakukan perbandingan sedemikian rupa akan memberitahu apakah halaman selesai men-download.
Berikut adalah beberapa contoh C++ kode:
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;
   }
}
				

Properti

ID Artikel: 180366 - Kajian Terakhir: 16 September 2011 - Revisi: 2.0
Kata kunci: 
kbhowto kbmt KB180366 KbMtid
Penerjemahan Mesin
PENTING: Artikel ini diterjemahkan menggunakan perangkat lunak mesin penerjemah Microsoft dan bukan oleh seorang penerjemah. Microsoft menawarkan artikel yang diterjemahkan oleh seorang penerjemah maupun artikel yang diterjemahkan menggunakan mesin sehingga Anda akan memiliki akses ke seluruh artikel baru yang diterbitkan di Pangkalan Pengetahuan (Knowledge Base) dalam bahasa yang Anda gunakan. Namun, artikel yang diterjemahkan menggunakan mesin tidak selalu sempurna. Artikel tersebut mungkin memiliki kesalahan kosa kata, sintaksis, atau tata bahasa, hampir sama seperti orang asing yang berbicara dalam bahasa Anda. Microsoft tidak bertanggung jawab terhadap akurasi, kesalahan atau kerusakan yang disebabkan karena kesalahan penerjemahan konten atau penggunaannya oleh para pelanggan. Microsoft juga sering memperbarui perangkat lunak mesin penerjemah.
Klik disini untuk melihat versi Inggris dari artikel ini:180366
Sanggahan Konten KB yang Tidak Lagi Diperbarui
Artikel ini berisi tentang produk yang tidak lagi didukung oleh Microsoft. Oleh karena itu, artikel ini disajikan ?sebagaimana adanya? dan tidak akan diperbarui.

Berikan Masukan

 

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