动态改变网页内容(CHtmlView/CWebBrowser2/IE)

本文介绍了一种使用IHTMLDocument2接口动态更改网页内容的方法,避免了将网页变为about:blank的问题。通过获取页面body元素并设置新的innerHTML内容实现更新。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

很多时候,我们需要动态的修改网页的内容。

早先COM集中营曾有篇文章介绍过,源代码:http://263.youkuaiyun.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或者WebBrowser
   return;

if (FAILED(pHTMLDocument->QueryInterface(&pPSI)))
{

   return;
}

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

LPCTSTR strText = m_pSourceView->LockBuffer();
DWORD 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");

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值