วิธีการที่กำหนดเมื่อเพจที่มีอยู่เสร็จในการโหลดในตัวควบคุมในเว็บเบราว์เซอร์

การแปลบทความ การแปลบทความ
หมายเลขบทความ (Article ID): 180366
ขยายทั้งหมด | ยุบทั้งหมด

สรุป

การควบคุมเว็บเบราว์เซอร์ Explorer อินเทอร์เน็ต fires เหตุการณ์ DocumentComplete เมื่อคุณเสร็จสิ้นการดาวน์โหลดเว็บเพจนั้น คุณสามารถสร้างฟังก์ชันตัวจัดการเหตุการณ์ในโปรแกรมประยุกต์ของคุณสำหรับเหตุการณ์นี้ บทความนี้อธิบายขั้นตอนในการใช้ในการกำหนดว่าการควบคุมเว็บเบราว์เซอร์เสร็จเรียบร้อยแล้วการดาวน์โหลดเว็บเพจที่

ข้อมูลเพิ่มเติม

การควบคุมเว็บเบราว์เซอร์ fires เหตุการณ์ DocumentComplete เมื่อมีการเปลี่ยนแปลงคุณสมบัติของ ReadyState ไป READYSTATE_COMPLETE บ่งชี้ว่า ตัวควบคุมเว็บเบราว์เซอร์เสร็จการดาวน์โหลดเว็บเพจ นี่คือจุดที่สำคัญบางอย่างเกี่ยวกับเหตุการณ์นี้:
  • ในกรณีของเพจที่มีเฟรมไม่มี DocumentComplete คือ fired หนึ่งครั้งหลังจากทุกอย่างเสร็จสิ้น
  • ในกรณีของเฟรมหลาย DocumentComplete ได้ fired หลายครั้ง เฟรมไม่ทุก fires เหตุการณ์นี้ แต่แต่ละเฟรมที่ fires เหตุการณ์การ DownloadBegin fires เหตุการณ์ DocumentComplete ที่สอดคล้องกัน
  • เหตุการณ์ DocumentComplete มี IDispatch * พารามิเตอร์ ซึ่งก็คือ IDispatch ของเฟรม (shdocvw) ซึ่ง fired DocumentComplete
  • เฟรมระดับบนสุด fires DocumentComplete ในตอนท้าย ดังนั้น การตรวจสอบว่า เพเสร็จสมบูรณ์แล้วดาวน์โหลด คุณจำเป็นต้องตรวจสอบว่าพารามิเตอร์ IDispatch * เหมือน IDispatch ของตัวควบคุมเว็บเบราว์เซอร์

    สำหรับ Visual Basic นี่คือรหัสที่ทำการตรวจสอบนี้:
    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
    					
การจัดการเหตุการณ์ DocumentComplete ใน c ++แสดงผล และดูว่า การดาวน์โหลดเว็บเพจที่เสร็จสมบูรณ์ ทำตามขั้นตอนเหล่านี้

โปรดสังเกตว่า คุณทำตามขั้นตอนขึ้นกับวิธีคุณใช้การควบคุมเว็บเบราว์เซอร์
  • ถ้าคุณกำลังสร้างตัวควบคุมเว็บเบราว์เซอร์ในวัตถุแบบ CWnd/CView คุณต้องทำตามขั้นตอนที่ 1 ถึง 4
  • ถ้าคุณกำลังสร้างตัวควบคุมเว็บเบราว์เซอร์ในวัตถุแบบ CDialog/CFormView เท่านั้นต้องทำตามขั้นตอนที่ 4
  • ถ้าคุณใช้คลาส CHtmlView ที่ให้มาพร้อมกับ c ++ 6.0 ที่ Visual แทนที่ CHtmlView::DocumentComplete() และทำตามขั้นตอนที่ 4 ใช้สมาชิก m_pBrowserApp ของคลา CHtmlView เพื่อเข้าถึงตัวควบคุมเว็บเบราว์เซอร์
  1. กำหนดวิธี OnDocumentComplete ในแฟ้มหัวข้อสำหรับคลาส CWnd/CView-มาของคุณ:
    afx_msg void OnDocumentComplete(LPDISPATCH lpDisp,
                                    VARIANT FAR* URL);
    					
  2. ประกาศได้รับเหตุการณ์ในแฟ้มของหัวข้อเดียวกัน:
    DECLARE_EVENTSINK_MAP()
    					
  3. ในการใช้งานแฟ้ม (.cpp) สำหรับคลา CWnd/CView-มาของคุณ ใช้การแมปเก็บเหตุการณ์ต่อไปนี้:
    BEGIN_EVENTSINK_MAP(CYourView, CView)
       ON_EVENT(CWBTstView, ID_WEB_BROWSE, 259 /* DocumentComplete */,
                OnDocumentComplete, VTS_DISPATCH VTS_PVARIANT)
    END_EVENTSINK_MAP()
    					
  4. ใช้วิธีการ 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();
    }
    					
วิธีนี้ทำงานเมื่อมีการควบคุมเว็บเบราว์เซอร์ navigates ไปยังเพจที่เปลี่ยนเฟรมระดับบนสุด พูดถ้า การนำทางที่เกิดขึ้นภายในกรอบเอง นั้น DocumentComplete ขั้นสุดท้ายที่ถูก fired เป็นของเฟรมและเฟรมที่ระดับสูงสุดไม่ ตัวอย่างเช่น พิจารณาสถานการณ์สมมติต่อไปนี้

ตัวควบคุมเว็บเบราว์เซอร์เป็นโฮสต์แบบเฟรมเซต ภายในเฟรมของเฟรมเซต ผู้ใช้คลิกบนการเชื่อมโยงที่เปิดขึ้นหน้าใหม่ในเฟรมเอง และช่วยเหลือของเฟรมเซตยัง หน้าใหม่อาจประกอบด้วยหลายเฟรมอีกครั้ง ดังนั้น จะมีหลายแจ้ง DocumentComplete (หนึ่งในแต่ละเฟรมใหม่) แต่ เนื่องจากเฟรมระดับสูงสุดไม่เปลี่ยนแปลง DocumentComplete ที่สุดท้ายจะว่า ของเฟรม ที่มีการเปลี่ยนแปลง

หากคุณสนใจในการตรวจสอบเอกสารขั้นสุดท้ายที่เสร็จสมบูรณ์ในสถานการณ์นี้ คุณสามารถทำต่อไปนี้:
ตรวจสอบว่า พารามิเตอร์ IDispatch ของ DocumentComplete เป็นเหมือนกับพารามิเตอร์ IDispatch ของเหตุการณ์ NavigateComplete2 แรก เนื่องจาก NavigateComplete2 ที่แรกของเฟรมที่ระดับบนสุด และ DocumentComplete ที่สุดท้ายยังเฟรมที่ระดับสูงสุด ทำการเปรียบเทียบในเช่นต้องจะบอกว่า หน้าเสร็จสมบูรณ์แล้วกำลังดาวน์โหลด
นี่คือบางอย่าง 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;
   }
}
				

คุณสมบัติ

หมายเลขบทความ (Article ID): 180366 - รีวิวครั้งสุดท้าย: 7 มกราคม 2554 - Revision: 2.0
Keywords: 
kbhowto kbmt KB180366 KbMtth
แปลโดยคอมพิวเตอร์
ข้อมูลสำคัญ: บทความนี้แปลโดยซอฟต์แวร์การแปลด้วยคอมพิวเตอร์ของ Microsoft แทนที่จะเป็นนักแปลที่เป็นบุคคล Microsoft มีบทความที่แปลโดยนักแปลและบทความที่แปลด้วยคอมพิวเตอร์ เพื่อให้คุณสามารถเข้าถึงบทความทั้งหมดในฐานความรู้ของเรา ในภาษาของคุณเอง อย่างไรก็ตาม บทความที่แปลด้วยคอมพิวเตอร์นั้นอาจมีข้อบกพร่อง โดยอาจมีข้อผิดพลาดในคำศัพท์ รูปแบบการใช้ภาษาและไวยากรณ์ เช่นเดียวกับกรณีที่ชาวต่างชาติพูดผิดเมื่อพูดภาษาของคุณ Microsoft ไม่มีส่วนรับผิดชอบต่อความคลาดเคลื่อน ความผิดพลาดหรือความเสียหายที่เกิดจากการแปลเนื้อหาผิดพลาด หรือการใช้บทแปลของลูกค้า และ Microsoft มีการปรับปรุงซอฟต์แวร์การแปลด้วยคอมพิวเตอร์อยู่เป็นประจำ
ต่อไปนี้เป็นฉบับภาษาอังกฤษของบทความนี้:180366
การปฏิเสธความรับผิดชอบในเนื้อหาของ KB ที่จะไม่มีการปรับปรุงอีกต่อไป
บทความนี้กล่าวถึงผลิตภัณฑ์ที่ Microsoft ไม่มีการสนับสนุนอีกต่อไป เนื้อหาของบทความจึงมีการนำเสนอ "ตามลักษณะที่เป็น" และจะไม่มีการปรับปรุงข้อมูลอีก

ให้ข้อเสนอแนะ

 

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