一个关于CHtmlView的加载顺序的问题

only_youch 2010-03-01 03:21:22
今天碰到一个关于CHtmlView的网页加载问题,百思不得其解。希望有人解小弟之惑:

类定义如下:
这个类中重写的几个虚函数只是为了在其中显示LOG所用。。。
class CMyHtmlView : public CHtmlView
{
public:
CMyHtmlView(){}

VOID Navigate(LPCTSTR lpszURL);
virtual void OnNavigateComplete2(LPCTSTR strURL);
virtual void OnBeforeNavigate2(LPCTSTR lpszURL, DWORD nFlags,
LPCTSTR lpszTargetFrameName, CByteArray& baPostedData,
LPCTSTR lpszHeaders, BOOL* pbCancel);

virtual void OnDownloadBegin();
virtual void OnDownloadComplete();
virtual void OnDocumentComplete(LPCTSTR lpszURL);
};

实现如下:
VOID CMyHtmlView::Navigate(LPCTSTR lpszURL)
{
CString strCurUrl = GetLocationURL();
TRACE(_T("\n\nNavigate:strUrl = %s, LocationUrl = %s\n"), lpszURL, strCurUrl);
CHtmlView::Navigate(lpszURL);
}

void CMyHtmlView::OnNavigateComplete2(LPCTSTR strURL)
{
CString strCurUrl = GetLocationURL();
TRACE(_T("OnNavigateComplete2:strUrl = %s, LocationUrl = %s\n"), strURL, strCurUrl);
}

void CMyHtmlView::OnBeforeNavigate2(LPCTSTR lpszURL, DWORD nFlags,
LPCTSTR lpszTargetFrameName, CByteArray& baPostedData,
LPCTSTR lpszHeaders, BOOL* pbCancel)

{
CString strCurUrl = GetLocationURL();
TRACE(_T("OnBeforeNavigate2:strUrl = %s, LocationUrl = %s\n"), lpszURL, strCurUrl);
}


void CMyHtmlView::OnDownloadBegin()
{
CString strCurUrl = GetLocationURL();
TRACE(_T("OnDownloadBegin:LocationUrl = %s\n"), strCurUrl);
}

void CMyHtmlView::OnDownloadComplete()
{
CString strCurUrl = GetLocationURL();
TRACE(_T("OnDownloadComplete:LocationUrl = %s\n"), strCurUrl);
}

void CMyHtmlView::OnDocumentComplete(LPCTSTR lpszURL)
{
CString strCurUrl = GetLocationURL();
TRACE(_T("OnDocumentComplete:strUrl = %s, LocationUrl = %s\n"), lpszURL, strCurUrl);

}

现在一对话框中定义了CMyHtmlView 的对象m_cHtmlView,
先调用m_cHtmlView.Navigate(_T("www.baidu.com"),得到的LOG如下:
Navigate:strUrl = www.baidu.com, LocationUrl =
OnBeforeNavigate2:strUrl = http://www.baidu.com/, LocationUrl =
OnDownloadBegin:LocationUrl =

OnDownloadComplete:LocationUrl =

OnDownloadBegin:LocationUrl =

OnNavigateComplete2:strUrl = http://www.baidu.com/, LocationUrl = http://www.baidu.com/
OnBeforeNavigate2:strUrl = about:blank, LocationUrl = http://www.baidu.com/
OnNavigateComplete2:strUrl = about:blank, LocationUrl = http://www.baidu.com/
OnDownloadComplete:LocationUrl = http://www.baidu.com/
OnDocumentComplete:strUrl = about:blank, LocationUrl = http://www.baidu.com/
OnDocumentComplete:strUrl = http://www.baidu.com/, LocationUrl = http://www.baidu.

再继续调用m_cHtmlView.Navigate(_T("www.google.cn"),得到的LOG如下:
Navigate:strUrl = www.google.cn, LocationUrl = http://www.baidu.com/
OnBeforeNavigate2:strUrl = http://www.google.cn/, LocationUrl = http://www.baidu.com/
OnDownloadBegin:LocationUrl = http://www.baidu.com/

OnDownloadComplete:LocationUrl = http://www.baidu.com/

OnDownloadBegin:LocationUrl = http://www.baidu.com/

OnNavigateComplete2:strUrl = http://www.google.cn/, LocationUrl = http://www.google.cn/
OnDownloadComplete:LocationUrl = http://www.google.cn/
OnDocumentComplete:strUrl = http://www.google.cn/, LocationUrl = http://www.google.cn/
OnDownloadBegin:LocationUrl = http://www.google.cn/
OnDownloadComplete:LocationUrl = http://www.google.cn/

注意这两段中加粗的部分。我想问的是:我加载google网页时为什么CHtmlView要对当前的网页baidu做一次downloadbegin->downloadcomplete->downloadbegin这个过程?
也就是说如果当前显示的网页为A,我让它链接到网页B时,为什么它先要把A再做一次下载啊?这不是明显就减慢了加载速度么?

如何能够让它不加载,因为我现在的程序中因为这个部分产生了错误,而且性能也不高。希望高手赐教。
...全文
116 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
wwgddx 2010-03-02
  • 打赏
  • 举报
回复
没做过,建议发到网络版块去问问, 揭贴记得公布答案@
WL_river 2010-03-02
  • 打赏
  • 举报
回复
类似问题,共同等解!帮顶
only_youch 2010-03-01
  • 打赏
  • 举报
回复
没有人碰到过么????急死人的啊。

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧