Internet explorer 8 如何在用户需要时,而不是在OnDocumentComplete(ie8以上)通过bho获取html文本

Internet explorer 8 如何在用户需要时,而不是在OnDocumentComplete(ie8以上)通过bho获取html文本,internet-explorer-8,bho,ihtmldocument,Internet Explorer 8,Bho,Ihtmldocument,这些步骤就是我所做的 1) 我刚在SetSite中从pUnkSite获得IWebBrowser2接口指针,就像大多数BHO通常所做的那样 2) 在OnDocumentComplete中, 2-1)已从IWebBrowser2成功获取IHTMLDocument接口指针。 2-2)从IHTMLDocument获取html文本 我确认上述步骤正确运行 但我真正想做的是,只要用户想要获取html文本,bho就会显示包含当前页面html的messagebox(例如,用户单击“获取html”按钮) 所以,当

这些步骤就是我所做的

1) 我刚在SetSite中从pUnkSite获得IWebBrowser2接口指针,就像大多数BHO通常所做的那样

2) 在OnDocumentComplete中, 2-1)已从IWebBrowser2成功获取IHTMLDocument接口指针。 2-2)从IHTMLDocument获取html文本

我确认上述步骤正确运行

但我真正想做的是,只要用户想要获取html文本,bho就会显示包含当前页面html的messagebox(例如,用户单击“获取html”按钮)

所以,当用户点击“获取html”按钮时,我编写了一个函数,如下所示

void CBHO::ClickedOnGetHtml()
{
    CComPtr<IDispatch> spDispDoc; 
    HRESULT hr = m_spWebBrowser->get_Document(&spDispDoc);  // m_spWebBrowser from SetSite
    if (SUCCEEDED(hr))
    {
        CComQIPtr<IHTMLDocument2> spHtmlDoc;
        spHtmlDoc = spDispDoc;
        CComPtr<IDispatch> spDisp;   
        spHtmlDoc->get_Script(&spDisp);        <- exception occured here in ie8. (worked correctly in ie6, but not in ie8.)
    }
}
更有趣的是,它在ie6中正常工作,但在ie8中不起作用。 (与ie6相比,ie8是否有任何变化?)

请留下任何关于这个问题的建议或意见

提前感谢。

尝试使用属性获取页面HTML:

CString GetOuterHTML(IWebBrowser2*pWebBrowser)
{
CCOMDISP河pDocDisp;
if(成功(pWebBrowser->get_文档(&pDocDisp))&&pDocDisp!=NULL)
{
CComQIPtr pDoc3=pDocDisp;
if(pDoc3!=NULL)
{
首席检察官;
if(成功(pDoc3->get_documentElement(&pRootElem))&&pRootElem!=NULL)
{
ccombstrtext;
if(成功(pRootElem->get_outerHTML(&bstrText)))
{
返回bstrText;
}
}
}
}
返回“L”;
}
mshtml.dll!GetCurrentServiceProvider()  + 0xc bytes
mshtml.dll!GetCallerCommandTarget()  + 0xa6 bytes
mshtml.dll!COmWindowProxy::SecureObject()  - 0x600c5 bytes
mshtml.dll!CDocument::get_Script()  + 0x9c bytes
BHO.dll!CBHO::ClickedOnGetHtml()  line 37 + 0x2d bytes C++