Mai lavorato con il controllo System.Windows.Forms.WebBrowser?
Oggi mi sono accorto che, se una pagina web richiede l’apertura di una nuova finestra, si apre Internet Explorer perdendo così la sessione corrente stabilita con il sito web. La risoluzione è concettualmente semplice, ma non immediata da trovare.
Aggiungiamo tra i riferimenti del progetto l’oggetto COM Microsoft Internet Controls, quindi inseriamo questo codice nella nostra form contenente il WebBrowser (nel costruttore del form o nell’evento Form.Load):
[csharp firstline="3"]// C# SHDocVw.WebBrowser shdocbrowser = (SHDocVw.WebBrowser)WebBrowser1.ActiveXInstance; shdocbrowser.NewWindow3 += NewWindow3; [/csharp]
[vbnet firstline="3"]' VB.NET Dim shdocbrowser As SHDocVw.WebBrowser = DirectCast(WebBrowser1.ActiveXInstance, SHDocVw.WebBrowser) AddHandler shdocbrowser.NewWindow3, AddressOf NewWindow3 [/vbnet]
Dove WebBrowser1 è il nostro WebBrowser.
Adesso inseriremo il codice per gestire la nuova finestra:
[csharp firstline="20"]// C# public void NewWindow3(ref object pDisp, ref bool cancel, uint flags, string URLContext, string URL) { webbrowserform browserform = new webbrowserform(); browserform.Show(); pDisp = browserform.WebBrowser1.ActiveXInstance; }[/csharp]
[vbnet firstline="20"]' VB.NET Public Sub NewWindow3(ByRef pDisp As Object, _ ByRef cancel As Boolean, _ ByVal flags As UInteger, _ ByVal URLContext As String, _ ByVal URL As String) Dim browserform As New webbrowserform browserform.Show() pDisp = browserform.WebBrowser1.ActiveXInstance End Sub [/vbnet]
webbrowserform è la nostra form contenente il WebBrowser.
Adesso il controllo funzionerà come desiderato, e le nuove finestre si apriranno nello stesso programma invece che in explorer.
Mi da un errore a questa riga “Dim browserform As New webbrowserform”
dice “Errore 6 Tipo ‘webbrowserform’ non definito.”