WebBrowser中打开新页面保留sessionid

大家有兴趣可以加我QQ群交流:14792063 广州软件开发团队

前几天写的网上订舱辅助系统,物流组反馈如果遇到意外情况,网站弹出交互新窗口,可是内容却看不到.测试后发现是由于新窗口打开在IE中,与当前会话失去了联系,所以要求重新登录,流程不能继续,要解决这个问题,必须要求新打开的网页受控于WebBrowser.

为解决这个问题,先百度后google,发现有好多人在问,可是解决办法大都不可靠,或语焉不详,或文不对题,最后终于找到了一篇文章解决了这个问题.鉴于这个问题的普遍性,我也把解决办法列出来,好让网友搜索时能多一点帮助.

解决办法很简单,分两情况,一是在当前WebBrowser中打开新页面,二是在新Form中的WebBrowser中打开新页面:

 

代码
        public Form1()
        {
            InitializeComponent();

            
this.webBrowser1.AllowWebBrowserDrop = false;  //可在属性里设置,很重要


            
//在新Form中的WebBrowser中打开
            (this.webBrowser1.ActiveXInstance as SHDocVw.WebBrowser).NewWindow2 += new SHDocVw.DWebBrowserEvents2_NewWindow2EventHandler(Form1_NewWindow2);

            
//在主WebBrowser中打开
            
//(this.webBrowser1.ActiveXInstance as SHDocVw.WebBrowser).NewWindow3 += new SHDocVw.DWebBrowserEvents2_NewWindow3EventHandler(Form1_NewWindow3);
        }

        
void Form1_NewWindow2(ref object ppDisp, ref bool Cancel)
    {
      Form5 frm 
= new Form5(); //事先建好一个带WebBrowser的窗体
      ppDisp = frm.webBrowser1.ActiveXInstance;
      frm.Show();
    }

        
void Form1_NewWindow3(ref object ppDisp, ref bool Cancel, uint dwFlags, string bstrUrlContext, string bstrUrl)
        {
            Cancel 
= true;
            
this.webBrowser1.Navigate(bstrUrl);
        }

 

 

然后如果在新窗口打开新页面,主页面和新页面在同一会话中,可互相影响了.

另:SHDocVw.dll 在 C:/WINDOWS/SYSTEM32下,要引用到项目中来,这个是基础,不应该有疑问吧.

 

posted on 2010-08-18 11:15  welcomesay  阅读(2033)  评论(1编辑  收藏  举报

导航