webBrowser内弹出窗口Session共享解决思路

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)
        {
            Form popup = new Form3();
            popup.Show(this);
            ppDisp = popup.webBrowser1.ActiveXInstance;
        }
form3里面放一个webBrowser控件,并且设置为public就OK了,需要引用SHDocVw.dll,从哪里引用可以度娘
------解决方案--------------------
1.跳出两个Form3出来可以把popup定义为全局变量,在创建前判断是否为null,不为空才创建;
2.想要关闭,可以直接关闭Form3啊,或者直接看下关闭按钮的源代码,执行windows.close()的js函数也可以;
------解决方案--------------------
不用定义上面的popup,同一窗体放置一个WB2就可以了,我刚才测试过了把
void nativeBrowser_NewWindow2(ref object ppDisp, ref bool Cancel)
        {
            Form popup = new Form3();
            popup.Show(this);
            ppDisp = popup.webBrowser1.ActiveXInstance;
        }
修改为:
      void nativeBrowser_NewWindow2(ref object ppDisp, ref bool Cancel)
        {

            ppDisp = WB2.ActiveXInstance;
        }
就可以了!
------解决方案--------------------
如果这个网页是你做的话,你可以在关闭网页的事件里面调用form3的方法。
例如:
 <button onclick="window.external.CloseForm()" >javascript访问C#代码</button>
然后form3里面加入:
 public void CloseForm()
        {
            this.Close();