動態改變網頁內容(CHtmlView/CWebBrowser2/IE) (轉)

worldblog發表於2007-12-09
動態改變網頁內容(CHtmlView/CWebBrowser2/IE) (轉)[@more@]

很多時候,我們需要動態的修改網頁的內容。

早先COM集中營曾有篇文章介紹過,/FileBBS/files/2001_9/T_642_1.zip">:

其中基本程式碼如下:

void CMainFrame::OnChangehtml()
{
 
 IHTMLDocument2 *pHTMLDocument=NULL;
 IPersistStreamInit *pPSI=NULL;

 IStream *pStream=NULL;
 HGLOBAL  hHTMLText;

 if (!(pHTMLDocument = (IHTMLDocument2*)m_pHtmlView->m_browser.GetDocument()))//m_pHtmlView是CHtmlView或者Browser
 return;
 
 if (FAILED(pHTMLDocument->QueryInterface(&pPSI)))
 {

 return;
 } 

 pHTMLDocument->clear();
 pPSI->InitNew();

 LPCTSTR strText = m_pView->LockBuffer();
 D dwLength= strlen(strText);
 hHTMLText = GlobalAlloc(GMEM_FIXED, dwLength);
 memset(hHTMLText, 0, dwLength);
 memcpy(hHTMLText, strText, dwLength);
 m_pSourceView->UnlockBuffer();
  CreateStreamOnHGlobal(hHTMLText, TRUE, &pStream);
 ULARGE_INTEGER libNewSize;
 libNewSize.QuadPart = dwLength;
 pStream->SetSize(libNewSize);
  pPSI->Load(pStream);

 pStream->Release();
 pPSI->Release(); 

}

網頁內容倒是動態改變了,但你檢視一下網頁屬性會發現,網頁變成了:about:blank

很痛苦是吧,變成空白頁了,呵呵~~

下面方法利用IHtmlDocument2的方法動態改變網頁內容,而不改變網頁屬性

BOOL CXXXXView::put_bodyHtml(CString cs)
{
 IHTMLDocument2* pHtmlDoc2 = (IHTMLDocument2*)GetHtmlDocument();
 if( pHtmlDoc2)
 {
 HRESULT hr = S_OK;
 IHTMLElement *pBodyElement;
 hr=pHtmlDoc2->get_body( &pBodyElement); 
 if(pBodyElement!=NULL) 
 { 
 BSTR pbBody = cs.AllocSysString();
 hr=pBodyElement->put_innerHTML(pbBody); //類似的還有put_innerTEXT
 pBodyElement->Release(); 
 } 
 pHtmlDoc2->Release(); 
 if( hr==S_FALSE) return FALSE;
 else return TRUE;
 }
 else return FALSE;
 
}

到時候你只需要這樣:put_BodyHtml("a string");


 


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-990430/,如需轉載,請註明出處,否則將追究法律責任。

相關文章