日期:2014-05-17  浏览次数:20870 次

webBrowser内弹出窗口Session共享
我在C#的From内使用了webBrowser控件,当网页是一个需要登陆验证的网页,登陆后点开一个链接时时,会弹出一个IE的窗口,并且会跳转到登陆界面;
如何才能做到弹开的IE与webBrowser控件共享Session,并可以像IE一样正常数据交互;

大家可以找个邮箱的例子试试,分不够可以再加;
webBrowser Session

------解决方案--------------------
把加载页面设置成你的 登录页面  然后再冲登录页面点到 你的目标页面
------解决方案--------------------
你可以新增加的webbrowser比如WB2,让弹出窗口的内容显示在WB2里面,这样WB1和WB2就是共享cookies的,因为你的程序和IE是不同的进程,所以肯定不会共享cookies.至于如何让新开的窗口在新的webbroser里面显示,可以在NewWindow事件里面处理。
        private void WB1_NewWindow(object sender, CancelEventArgs e)
        {
            e.Cancel = true;
            try
            {
                string url = this.WB1.Document.ActiveElement.GetAttribute("href");

                this.WB2.Navigate(url);
            }
            catch { }
        }
------解决方案--------------------
引用:
Quote: 引用:

你可以新增加的webbrowser比如WB2,让弹出窗口的内容显示在WB2里面,这样WB1和WB2就是共享cookies的,因为你的程序和IE是不同的进程,所以肯定不会共享cookies.至于如何让新开的窗口在新的webbroser里面显示,可以在NewWindow事件里面处理。
        private void WB1_NewWindow(object sender, CancelEventArgs e)
        {
            e.Cancel = true;
            try
            {
                string url = this.WB1.Document.ActiveElement.GetAttribute("href");

                this.WB2.Navigate(url);
            }
            catch { }
        }


这种方案我已经试过了,对于有连接地址的可以实现,但对于javaScript按钮,实际链接的不是一个地址,而是运行一个函数就没有办法了;


下面这种办法,对于javascript按钮也可以实现
var nativeBrowser = (SHDocVw.WebBrowser)webBrowser1.ActiveXInstance;            
nativeBrowser.NewWindow2 += new SHDocVw.DWebBrowserEvents2_NewWindow2EventHandler(nativeBrowser_NewWindow2);
下面是打开新窗口的事件
void nativeBrowser_NewWindow2(ref object ppDisp, ref bool Cancel)