WebBrowser中打开新页面

前几天写的网上订舱辅助系统,物流组反馈如果遇到意外情况,网站弹出交互新窗口,可是内容却看不到.测试后发现是由于新窗口打开在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下,要引用到项目中来,这个是基础,不应该有疑问吧.

阅读更多
上一篇利用webBrowser获取页面iframe中的内容
下一篇ASP.NET MVC 框架之下载、安装和Hello World
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭