Link to home
Start Free TrialLog in
Avatar of Raymun
Raymun

asked on

CHtmlView::GetSource() Problem Retrieving Full Source

When I CHtmlView::Navigate2(..) to a particular Web page, a subsequent call to CHtmlView::GetSource(..) from CHtmlView::OnNavigateComplete2() does not retrieve the full HTML source code. Instead, it is cut short. That is, only some of the source is retrieved. For example, if I open up IE to the web page and View->Source, and the source is, say, 100kB, then calling CHtmlView::GetSource(..) after navigating to the same page retrieves something < 100kB.

Any ideas on how to get the full source? Thanks
ASKER CERTIFIED SOLUTION
Avatar of DanRollins
DanRollins
Flag of United States of America image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
Avatar of Raymun
Raymun

ASKER

I want to add a little more info:

When I CHtmlView::Navigate2(..) to a page with a big source file, a subsequent call to CHtmlView::GetSource(..) from CMyHtmlView::OnNavigateComplete2(..) gives me a source full of scripting code and the actual HTML code (supposed to be at the end) is cut off. When I do the same procedure on a page with a small source file, I get the full code (script + HTML).

I also tried overriding GetSource(..) to use IHTMLwhatever to get the source:
CMyHtmlView::GetSource(CString &strRef)
{
   CComPtr<IDispatch> pDisp = GetHtmlDocument();
   CComPtr<IHTMLDocument2> pDoc;
   pDisp->QueryInterface(IID_HTMLDocument2, (void**)&pDoc);
   CComPtr<IHTMLElement> pBody;
   pDoc->get_body(&pBody);

   ...
}

However, after the call to get_body(..), pBody is always NULL regardless of what page I've navigated to, even though both pDisp and pDoc are NOT NULL.

Another idea i tried was overriding CHtmlView::GetSource(..) and keeping everything the same except changing
   hMemory = GlobalAlloc(GMEM_MOVEABLE, 0);
to
   hMemory = GlobalAlloc(GMEM_MOVEABLE, <some large number>);
and after testing different numbers, the returned source is still cut short.

I am running out of ideas. Please help.

DanRollins:
Thanks for the input. What two identical functions are you referring to? Anyway I will look into the CString and see what I can find. I wasn't familiar with OnDocumentComplete(..). According to Microsoft, the event is fired after finishing downloading a Web page.  I thought CHtmlView::OnNavigateComplete2(..) is called on the same event? What's the difference?

Thanks
Avatar of Raymun

ASKER

OnDocumentComplete() did the trick. Thanks Dan