我在开发一个基于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不熟悉,不知道怎么下手,搜索了不少但是也没找到答案,请高手指点指点,谢谢!
请教各位指点,不甚感激!

解决方案 »

  1.   

    大概想起来了,当时情况是第一个页面有Post数据并且在新页面打开的时候新页面里面接收不到Post数据,后来发现是打开新页面的方式不对,改了以后就好了,不知道是不是你需要的。
    老方式是在NewWindow3里面
    m_newWebBrowser.Navigate(bstrUrl, NULL, NULL, NULL, NULL);  
    改了以后在NewWindow3里面:
    CMoreDlg *p = new CMoreDlg();
    *ppDisp = p->m_browser.get_Application();
    这样就保证新页面也在webbrowser里面打开并且Post数据都正常了以上是cnfixit的回复内容。
      

  2.   

    void CFirstDlg::OnNewWindow3(LPDISPATCH* ppDisp, BOOL* Cancel, unsigned long dwFlags, LPCTSTR bstrUrlContext, LPCTSTR bstrUrl)
    {
        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已经传过来了。不用再写任何代码
    }