none
为何在WebBrowser控件中点击一个链接的时候,在弹出的新IE窗口中都需要再输入一次密码? RRS feed

  • 问题

  •  

    我在程序中放了一个WebBrowser控件,用来打开一个页面,页面是需要身份验证的。我已经输入用户名和密码了,登录进入之后一切都是正常的。但是如果点击那些需要在新窗口中打开的链接(例如window.open或者target=_blank的链接),此时会出现一个新的IE窗口(在C#的程序之外,是一个独立的IE窗口),然后又让我输入用户名和密码。之前不是已经登录过的吗?为何WebBrowser控件会这样的呢?

    如果我直接打开IE登录,然后点击什么连接都是不需要再输入密码的。奇怪为何在WebBrowser中点击就需要呢?
    • 已移动 Sheng Jiang 蒋晟 2009年11月23日 23:10 IE开发问题 (发件人:Visual Studio 相关讨论)
    2008年11月17日 8:30

答案

  • 这个页面可能把用户信息存储在Session中~你新打开的IE有新的session~因此认证信息并没有带过来~而你直接用IE登陆在两个页面间用的是相同session所以不需要重新登陆
    2008年11月19日 14:25
    版主
  •     我给你提个解决此问题的思路吧,就是用你自己程序内的WebBrowser打开新窗口,不用IE打开,这样的话你是在一个进程内访问同一个网站,该网站也就会认为你是在同一个会话内。

        怎样实现呢?如果你用的是VS2003,WebBrowser控件应该是作为ActiveX控件导入的,在该WebBrowser控件的NewWindow2事件内,有一个AxSHDocVw.DWebBrowserEvents2_NewWindow2Event参数,你把该参数的ppDisp属性设置为你程序中的WebBrowser控件的Application即可,这个WebBrowser可以是在另一个窗体内,示例代码如下:

    private void axWebBrowser1_NewWindow2(object sender, AxSHDocVw.DWebBrowserEvents2_NewWindow2Event e)
    {
       Form1 frmWB;
       frmWB = new Form1();

       frmWB.axWebBrowser1.RegisterAsBrowser = true;
       e.ppDisp = frmWB.axWebBrowser1.Application;
       frmWB.Visible = true;
    }

       VS2005和2008自带的WebBrowser控件没有这个事件,只有一个NewWindow事件,但该事件的参数CancelEventArgs没有ppDisp属性,也就是说MS在实现这个控件时打折了,用它是没法实现上述功能了,你可以还像在VS2003上一样,用ActiveX的WebBrowser控件试试。

    2008年11月20日 5:28

全部回复

  • 这个页面可能把用户信息存储在Session中~你新打开的IE有新的session~因此认证信息并没有带过来~而你直接用IE登陆在两个页面间用的是相同session所以不需要重新登陆
    2008年11月19日 14:25
    版主
  •     我给你提个解决此问题的思路吧,就是用你自己程序内的WebBrowser打开新窗口,不用IE打开,这样的话你是在一个进程内访问同一个网站,该网站也就会认为你是在同一个会话内。

        怎样实现呢?如果你用的是VS2003,WebBrowser控件应该是作为ActiveX控件导入的,在该WebBrowser控件的NewWindow2事件内,有一个AxSHDocVw.DWebBrowserEvents2_NewWindow2Event参数,你把该参数的ppDisp属性设置为你程序中的WebBrowser控件的Application即可,这个WebBrowser可以是在另一个窗体内,示例代码如下:

    private void axWebBrowser1_NewWindow2(object sender, AxSHDocVw.DWebBrowserEvents2_NewWindow2Event e)
    {
       Form1 frmWB;
       frmWB = new Form1();

       frmWB.axWebBrowser1.RegisterAsBrowser = true;
       e.ppDisp = frmWB.axWebBrowser1.Application;
       frmWB.Visible = true;
    }

       VS2005和2008自带的WebBrowser控件没有这个事件,只有一个NewWindow事件,但该事件的参数CancelEventArgs没有ppDisp属性,也就是说MS在实现这个控件时打折了,用它是没法实现上述功能了,你可以还像在VS2003上一样,用ActiveX的WebBrowser控件试试。

    2008年11月20日 5:28
  • modongxi说的没错

    2008年11月21日 1:23
  •  

    谢谢大家!

    2008年12月5日 4:18