我使用visual C++ 2005 sp2 生成了一个SDI程序,最后一步的时候选择了从CHTMLVIEW继承。
按照网上的说法,重载了onNewWindow2如下:
void CBrowserView::OnNewWindow2(LPDISPATCH* ppDisp, BOOL* Cancel)
{
    // Get a pointer to the application object
    CWinApp* pApp = AfxGetApp();    // Get the correct document template
    CDocTemplate* pDocTemplate;
    POSITION pos = pApp->GetFirstDocTemplatePosition();
    pDocTemplate = pApp->GetNextDocTemplate(pos);    ASSERT(pDocTemplate);    // Create the new frame
    CFrameWnd* pNewFrame = pDocTemplate->CreateNewFrame(GetDocument(),
                                   (CFrameWnd*)AfxGetMainWnd());
    ASSERT(pNewFrame);    // Activate the frame and set its active view
    pDocTemplate->InitialUpdateFrame(pNewFrame, NULL);    CBrowserView* pWBVw = (CBrowserView*)pNewFrame->GetActiveView();
    ASSERT(pWBVw);    pWBVw->SetRegisterAsBrowser(TRUE);
    *ppDisp = pWBVw->m_pBrowserApp;
}
然后用它来打开自己开发的web系统(weblogic服务器),可以正常登陆和使用,
当遇到弹出页面(比如选择联系人),web系统就会提示登陆已经过期。
推测应该是新开页面的时候cookie掉了。
(注:此浏览器是一个SDI浏览器,不存在跨进程的问题吧?)

解决方案 »

  1.   

    丢COOKIE的事我没见过,但是你的最后一句需要改成 pWBVw->m_pBrowserApp->QueryInterface(IID_IDispatch, ppDisp);
      

  2.   

    最后一句照着您的代码改正了,但是编译不通过,ppDisp的参数类型不对,让我改成了(void**)&ppDisp。
    但是仍旧没有出来效果。
    使用世界之窗、腾讯TT等浏览器打开弹出页面的时候,会在旁边新开一个Tab页,但是不会出现参数丢失的情况。
    昨天我在页面加载完毕的时候用MessageBox弹出它cookie,发现这个cookie和父页面的是一样的。启动weblogic的
    调试功能,看到的servlet中session中的标识用户是否登陆成功的值却丢失了。
    还请各位指点。