描述:
是这样的,我的目的是在我访问某个网址的时候,当下载完网页的内容,并且还没被浏览器解释执行之前拿下网页源代码,然后修改之,还给浏览器解释执行。我现在利用的事BHO来写这个插件,但是现在我的代码是
case DISPID_DOCUMENTCOMPLETE:
{
USES_CONVERSION;
CComQIPtr<IHTMLDocument2> spHTML;
CComPtr<IDispatch> pDisp;
HRESULT hr = mWebBrowser2->get_Document((IDispatch**)(&spHTML));
if (FAILED(hr))
return hr;
if(SUCCEEDED(hr))
{
CComQIPtr<IHTMLDocument2> spHTMLDoc = spHTML;
CComPtr<IHTMLElement> sbody;
HRESULT hr = spHTMLDoc->get_body(&sbody);
BSTR sdoc;
hr = sbody->get_outerHTML(&sdoc);
LPTSTR psz = new TCHAR[500000];
lstrcpy(psz,OLE2T(sdoc));
FILE *temp;
temp = fopen("C:\\temp.txt", "w+");
fprintf(temp,"%s\n",psz);
fclose(temp);
}
break;
}
这样的话,在DOCUMENTCOMPLETE时间发生时,网页已经显示出来了,拿到的代码就迟了。
经过分析我知道应该是在case DISPID_DOWNLOADCOMPLETE时获取源代码,但是此时就不可能通过
HRESULT hr = spHTMLDoc->get_body(&sbody);来获得,请高手指点,怎么才能在DISPID_DOWNLOADCOMPLETE时获取到代码呀!!获取了经过修改以后又怎么“还”给浏览器呢?
解决方案1:
http://www.cppblog.com/phenix-burn/archive/2006/08/29/11824.html
解决方案2: 用IPersistStreamInit::Save() 方法将下载的你容保存到流,修改完成后,在用IPersistStreamInit::Load()加载。
或者在开始导航时直接用wininet API进行下载,修改完成后用IPersistStreamInit::Load()加载