解决方案 »

  1.   

    举个例子:
    我用webBrowser控件登陆并打开了邮箱,点击其中一封邮件,正常在IE内,新邮件会在新窗口中打开,现在在webBrowser内打开邮件,会自动由IE打开,IE窗口会定位在登陆界面而不是要打开的邮件界面;
    我希望webBrowser的Session可以和IE共享或者可以不用IE打开也能实现共享;
      

  2.   

    你可以新增加的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 { }
            }
      

  3.   


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

  4.   


    这种方案我已经试过了,对于有连接地址的可以实现,但对于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,从哪里引用可以度娘
      

  5.   

    楼上的老兄,你的方法我试了可以的,非常感谢;
    现在的问题是:
    1、我点完按钮,会跳出两个Form3出来;
    2、我弹出窗口内有个按钮是关闭浏览器窗口,点确定后不能关闭(因为是我的windows Form);加分;
      

  6.   

    1.跳出两个Form3出来可以把popup定义为全局变量,在创建前判断是否为null,不为空才创建;
    2.想要关闭,可以直接关闭Form3啊,或者直接看下关闭按钮的源代码,执行windows.close()的js函数也可以;
      

  7.   

    本人C#不熟,请详细说明怎么定义popup为全局变量?
    因为调用的是一个别人的网站,所以不能修改网站关闭源码,只能在Form上去捕获然后关闭,请给个例子;非常感谢!!
      

  8.   

    不用定义上面的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;
            }
    就可以了!
      

  9.   

    如果这个网页是你做的话,你可以在关闭网页的事件里面调用form3的方法。
    例如:
     <button onclick="window.external.CloseForm()" >javascript访问C#代码</button>
    然后form3里面加入:
     public void CloseForm()
            {
                this.Close();
            }
    如果网页不是你做的,那么就麻烦点了,你得找到那个'关闭网页'html标签,然后给修改他的click方法
      

  10.   

    谢谢楼上两位的回复;
    1、这个网页是我们公司买 的一个外部的产品,没有源码,所以需要去获取到它的关闭事件然后怎么把窗口关闭;
    2、还没试楼上的在同一个form内设置两个webBrowser的方法,不过我想即便可以,两个webBrowser应该怎么显示呢?
      

  11.   

    完美解决弹出窗口关闭问题:
           private  void Window_Unload(object sender, HtmlElementEventArgs e)
             {
                 if (this.webBrowser1.Document == null)
                     this.Close();        }
            private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
            {
                webBrowser1.Document.Window.Unload += new HtmlElementEventHandler(Window_Unload);
            }
    谢谢楼上的几个兄弟,结帖;