.net session popup browser new-window

.net - System.Windows.Forms.WebBrowser abre enlaces en la misma ventana o nueva ventana con la misma sesiĆ³n



session popup (2)

Acabo de pasar una hora buscando la respuesta, así que pensé en publicar los resultados aquí. Puede usar el objeto SHDocVwCtl.WebBrowser_V1 para capturar el evento NewWindow.

NOTA: Código de http://www.experts-exchange.com/Programming/Languages/Visual_Basic/Q_21484555.html#discussion

//-------------------------------VB.NET Version:------------------------------- Dim WithEvents Web_V1 As SHDocVwCtl.WebBrowser_V1 Private Sub Form_Load() Set Web_V1 = WebBrowser1.Object End Sub Private Sub Web_V1_NewWindow(ByVal URL As String, ByVal Flags As Long, ByVal TargetFrameName As String, PostData As Variant, ByVal Headers As String, Processed As Boolean) Processed = True WebBrowser1.Navigate URL End Sub //-------------------------------C# Version------------------------------- private SHDocVw.WebBrowser_V1 Web_V1; //Interface to expose ActiveX methods private void Form1_Load(object sender, EventArgs e) { //Setup Web_V1 interface and register event handler Web_V1 = (SHDocVw.WebBrowser_V1)this.webBrowser1.ActiveXInstance; Web_V1.NewWindow += new SHDocVw.DWebBrowserEvents_NewWindowEventHandler(Web_V1_NewWindow); } private void Web_V1_NewWindow(string URL, int Flags, string TargetFrameName, ref object PostData,string Headers, ref bool Processed) { Processed = true; //Stop event from being processed //Code to open in same window this.webBrowser1.Navigate(URL); //Code to open in new window instead of same window //Form1 Popup = new Form1(); //Popup.webBrowser1.Navigate(URL); //Popup.Show(); }

Al usar el control .NET WebBrowser, ¿cómo se abre un enlace en una nueva ventana usando la misma sesión (es decir, no se inicia una nueva sesión de ASP.NET en el servidor) o cómo se captura el evento de la nueva ventana en abrir la URL en el mismo control WebBrowser?


Versión ligeramente limpia de la respuesta de Greg. Modifica el comportamiento del control transferido en lugar de depender de una variable global. Uso:

InlinePopups(webBrowser1);

Código:

// interface to expose ActiveX methods private SHDocVw.WebBrowser_V1 Web_V1; private void InlinePopups(WebBrowser browser) { // hooks to force new windows to open in the current instance Web_V1 = (SHDocVw.WebBrowser_V1)browser.ActiveXInstance; Web_V1.NewWindow += new SHDocVw.DWebBrowserEvents_NewWindowEventHandler((string URL, int Flags, string TargetFrameName, ref object PostData, string Headers, ref bool Processed) => { Processed = true; // stop event from being processed // open in the existing window browser.Navigate(URL); }); }

Todavía necesita la referencia a% WINDIR% / system32 / shdocvw.dll, por supuesto.