簡體   English   中英

如何在用戶需要時通過bho獲取html文本,而不是在OnDocumentComplete處(ie8以上)

[英]how to get html text through bho at when user want, not at OnDocumentComplete (above ie8)

這些步驟是我所做的。

1)我只是像大多數bho一樣從SetSite中的pUnkSite獲取了IWebBrowser2接口指針。

2)在OnDocumentComplete中,2-1)從IWebBrowser2成功獲取了IHTMLDocument接口指針。 2-2)從IHTMLDocument獲取html文本

我確認上述這些步驟正常工作。

但是我真正想做的是,每當用戶想要獲取html文本時,bho就會顯示包含當前頁面html的消息框(例如,用戶單擊“獲取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.)
    }
}

這是發生異常時的調用堆棧。

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++

更有趣的是,它在ie6中正常工作,但在ie8中無效。 (與ie6相比,ie8上是否有任何變化?)

請就此問題留下任何建議或意見,

提前致謝。

嘗試使用outerHTML屬性獲取頁面HTML:

CString GetOuterHTML(IWebBrowser2* pWebBrowser)
{
    CComDispatchDriver pDocDisp; 
    if(SUCCEEDED(pWebBrowser->get_Document(&pDocDisp)) && pDocDisp != NULL)
    {
        CComQIPtr<IHTMLDocument3> pDoc3 = pDocDisp;
        if(pDoc3 != NULL)
        {
            CComPtr<IHTMLElement> pRootElem;
            if(SUCCEEDED(pDoc3->get_documentElement(&pRootElem)) && pRootElem != NULL)
            {
                CComBSTR bstrText;
                if(SUCCEEDED(pRootElem->get_outerHTML(&bstrText)))
                {
                    return bstrText;
                }
            }
        }
    }
    return L"";
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM