近期用CppWebBrowser开发一个专用客户端程序,针对弹出页面碰到以下两个问题,求教高手。
针对弹出页面,我们的客户端处理有两种方式。
1、客户端弹出一个含有CppWebBrowser的新窗口打开。OnNewWindow2能检测到有弹出窗口,但不知道如何获得URL传递到新窗口中的CppWebBrowser。
2、直接IE弹出,如何使弹出的IE和原客户端程序保持同一个Session。

谢谢!

问题2,实际原因应该是新打开了一个IE进程。需要解决这个问题才行。

感谢 yuanreid 的解答,问题1已解决,解决方案如下:
CppWebBrowser1NewWindow2(TObject *Sender,
      LPDISPATCH *ppDisp, VARIANT_BOOL *Cancel)
{
        TPopWindow * win = new TPopWindow(Owner); //创建一个新窗口
        win->Show();
        *ppDisp = win->CppWebBrowser1->Application;  //指向新窗口CppWebBrowser
}

问题2 ,通过cookie方式解决始终不是一个最好的办法。

再次感谢yuanreid !!!

1、试试在打开新窗口前,是否会触发OnBeforeNavigate2事件,里面有URL参数(未验证)。也许还有更好的办法。
刚试过,这个方法不好用。也许可以获取IWebBrowser2对象的接口来获取这个消息。

查了一下帮助,我在OnNewWindow2中如下处理,可以将cpwbrwsr1中的弹出窗口内容,放入cpwbrwsr2中显示。但是有一个问题,程序关闭时,出现了异常。正在研究
code=C/C++]
void __fastcall TForm1::cpwbrwsr1NewWindow2(TObject *Sender,
      LPDISPATCH *ppDisp, VARIANT_BOOL *Cancel)
{
    *ppDisp = (LPDISPATCH )cpwbrwsr2->DefaultDispatch;
}
[/code]

改成这样,问题解决。

*ppDisp = (LPDISPATCH )cpwbrwsr2->Application;

使用自己的界面打开新窗口可以保证Session不变

C/C++ code
void __fastcall TForm1::cpwbrwsr1NewWindow2(TObject *Sender, LPDISPATCH *ppDisp, VARIANT_BOOL *Cancel) { if(*ppDisp) return; Form2 = new TForm2(this); Form2->Show(); *ppDisp = Form2->cpwbrwsr1->Application; }

引用 3 楼 wcq8303 的回复:
感谢 yuanreid 的解答,问题1已解决,解决方案如下:
CppWebBrowser1NewWindow2(TObject *Sender,
      LPDISPATCH *ppDisp, VARIANT_BOOL *Cancel)
{
        TPopWindow * win = new TPopWindow(Owner); //创建一个新窗口
        win->Show();
        *ppDisp = win->CppWebBrowser1->Application;  //指向新窗口CppWebBrowser
}

问题2 ,通过cookie方式解决始终不是一个最好的办法。

再次感谢yuanreid !!!

晕,根本没有注意你解决了,我还找了半天的资料。

自己打开的窗口,应该不会导致新开IE进程,你再试试Session问题。

再次感谢yuanreid的解答!
问题2 估计只能通过自身系统的支持去解决了。