Wenn Sie das .NET WebBrowser-Steuerelement verwenden, wie öffnen Sie einen Link in einem neuen Fenster mit der gleichen Sitzung (dh .. nicht starten eine neue ASP.NET-Sitzung auf dem Server) oder wie erfassen Sie das neue Fensterereignis, um die URL im selben WebBrowser-Steuerelement zu öffnen?System.Windows.Forms.WebBrowser Öffnen Sie Links in demselben Fenster oder einem neuen Fenster mit derselben Sitzung
12
A
Antwort
19
Ich habe gerade eine Stunde nach der Antwort gesucht, also würde ich die Ergebnisse hier posten. Sie können das SHDocVwCtl.WebBrowser_V1-Objekt verwenden, um das NewWindow-Ereignis aufzuzeichnen.
HINWEIS: Code von 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();
}
3
Leicht-Version von Gregs Antwort gereinigt. Es ändert das Verhalten des übergebenen Steuerelements, anstatt sich auf eine globale Variable zu verlassen. Verbrauch:
InlinePopups(webBrowser1);
Code:
// 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);
});
}
muss noch die Referenz auf% windir% \ system32 \ shdocvw.dll, natürlich.
In welcher Baugruppe ist SHDocVw definiert? Ich kann es in mindestens mshtml.dll nicht finden. –
Ich denke, es unter% windir% \ System32 \ shdocvw.dll –
Obejet ist kein Mitglied von webBrower1 das ist, was ich bin gettinf –