我在开发一个基于WebBrowser的MFC程序,现在有这样的问题:关于WebBrowser提供的NewWindow3和BeforeNavigate2这两个事件,现在我想让所有链接都在我的程序里面打开而不使用其他浏览器,就出现下面这样的情况
假如有web1和web2,win1窗口的web1按钮点击提交到web2,在新窗口win2打开web2,事件的发生顺序是NewWindow3->BeforeNavigate2,win1的NewWindow3响应函数是通过new新的窗口,然后使用新窗口的webbrowser.Navigate()函数浏览页面的。现在问题就是,win1的NewWindow3函数先发生,win2的BeforeNavigate2后发生,但是NewWindow3函数不提供PostData和Headers,这两个参数是在BeforeNavigate2函数里面提供的,这样就没办法在Navigate的时候指定PostData和Header了,弄的明明是POST的方式变成GET的方式了,不知道说清楚没有,代码如下://这是第一个窗口的
void CFirstDlg::OnNewWindow3(LPDISPATCH* ppDisp, BOOL* Cancel, unsigned long dwFlags, LPCTSTR bstrUrlContext, LPCTSTR bstrUrl)
{ * Cancel = TRUE;
CNewDlg * newdlg = new CNewDlg;
newdlg->Create(IDD_DLG_NEW);
newdlg->ShowWindow(SW_SHOW);
newdlg->m_newWebBrowser.Navigate(bstrUrl, NULL, NULL, NULL, NULL); //这里不知道怎么获取PostData和Header数据……
}//这是新窗口
void CNewDlg::BeforeNavigate2Explorer1(LPDISPATCH pDisp, VARIANT* URL, VARIANT* Flags, VARIANT* TargetFrameName, VARIANT* PostData, VARIANT* Headers, BOOL* Cancel)
{
//PostData和Header数据都在这里,但是这是后发生的,假如上面的函数不指定PostData和Header,这里这两个参数就
//没数据
}
现在的问题就是有没有办法在NewWindow3响应函数里面获取PostData和Header数据,COM不熟悉,不知道怎么下手,搜索了不少但是也没找到答案,请高手指点指点,谢谢!
请教各位指点,不甚感激!
假如有web1和web2,win1窗口的web1按钮点击提交到web2,在新窗口win2打开web2,事件的发生顺序是NewWindow3->BeforeNavigate2,win1的NewWindow3响应函数是通过new新的窗口,然后使用新窗口的webbrowser.Navigate()函数浏览页面的。现在问题就是,win1的NewWindow3函数先发生,win2的BeforeNavigate2后发生,但是NewWindow3函数不提供PostData和Headers,这两个参数是在BeforeNavigate2函数里面提供的,这样就没办法在Navigate的时候指定PostData和Header了,弄的明明是POST的方式变成GET的方式了,不知道说清楚没有,代码如下://这是第一个窗口的
void CFirstDlg::OnNewWindow3(LPDISPATCH* ppDisp, BOOL* Cancel, unsigned long dwFlags, LPCTSTR bstrUrlContext, LPCTSTR bstrUrl)
{ * Cancel = TRUE;
CNewDlg * newdlg = new CNewDlg;
newdlg->Create(IDD_DLG_NEW);
newdlg->ShowWindow(SW_SHOW);
newdlg->m_newWebBrowser.Navigate(bstrUrl, NULL, NULL, NULL, NULL); //这里不知道怎么获取PostData和Header数据……
}//这是新窗口
void CNewDlg::BeforeNavigate2Explorer1(LPDISPATCH pDisp, VARIANT* URL, VARIANT* Flags, VARIANT* TargetFrameName, VARIANT* PostData, VARIANT* Headers, BOOL* Cancel)
{
//PostData和Header数据都在这里,但是这是后发生的,假如上面的函数不指定PostData和Header,这里这两个参数就
//没数据
}
现在的问题就是有没有办法在NewWindow3响应函数里面获取PostData和Header数据,COM不熟悉,不知道怎么下手,搜索了不少但是也没找到答案,请高手指点指点,谢谢!
请教各位指点,不甚感激!
老方式是在NewWindow3里面
m_newWebBrowser.Navigate(bstrUrl, NULL, NULL, NULL, NULL);
改了以后在NewWindow3里面:
CMoreDlg *p = new CMoreDlg();
*ppDisp = p->m_browser.get_Application();
这样就保证新页面也在webbrowser里面打开并且Post数据都正常了以上是cnfixit的回复内容。
{
CNewDlg * newdlg = new CNewDlg;
newdlg->Create(IDD_DLG_NEW);
newdlg->ShowWindow(SW_SHOW);
*ppDisp = newdlg->m_newWebBrowser.get_Application();
//改变ppDisp指针即可,不需要*Cancel=True,也不需要直接调用newdlg->m_newWebBrowser.Navigate
}
//这是新窗口
void CNewDlg::BeforeNavigate2Explorer1(LPDISPATCH pDisp, VARIANT* URL, VARIANT* Flags, VARIANT* TargetFrameName, VARIANT* PostData, VARIANT* Headers, BOOL* Cancel)
{
//在这里下断点,就能看到PostData已经传过来了。不用再写任何代码
}