12 Stimmen

System.Windows.Forms.WebBrowser öffnet Links im selben Fenster oder in einem neuen Fenster mit derselben Sitzung

Wenn Sie das .NET WebBrowser-Steuerelement verwenden, wie öffnen Sie einen Link in einem neuen Fenster mit der gleichen Sitzung (d.h.. starten Sie keine neue ASP.NET-Sitzung auf dem Server), oder wie erfassen Sie das neue Fenster-Ereignis, um die URL in der gleichen WebBrowser-Steuerelement zu öffnen?

19voto

Greg Bray Punkte 14059

Ich habe gerade eine Stunde mit der Suche nach der Antwort verbracht, also dachte ich, ich würde die Ergebnisse hier veröffentlichen. Sie können das Objekt SHDocVwCtl.WebBrowser_V1 verwenden, um das Ereignis NewWindow zu erfassen.

HINWEIS: Code aus 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();
}

3voto

jvenema Punkte 43201

Leicht bereinigte Version von Gregs Antwort. Sie ändert das Verhalten des übergebenen Steuerelements, anstatt sich auf eine globale Variable zu verlassen. Verwendung:

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);
    });
}

Benötigt noch den Verweis auf %WINDIR% \system32\shdocvw.dll natürlich.

1voto

Chris Raisin Punkte 334

Nachdem Sie den Verweis auf shdocvw.dll zu Ihrem Projekt hinzugefügt haben wenn Sie das actuasl-Objekt nicht zu Ihrer Toolbox hinzufügen (shwos als "Microsoft Browser") dann definieren Sie das Objekt am Anfang Ihres Codes mit:

Dim WithEvents Web_V1 As SHDocVw.WebBrowser_V1

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X