System.Windows.Forms.WebBrowser在相同窗口或新窗口中打开具有相同会话的链接

Gre*_*ray 12 .net browser session popup new-window

使用.NET WebBrowser控件时如何使用相同的会话在新窗口中打开链接(即..不要在服务器上启动新的ASP.NET会话),或者如何捕获新窗口事件到在同一个WebBrowser控件中打开URL?

Gre*_*ray 19

我花了一个小时寻找答案,所以我会在这里发布结果.您可以使用SHDocVwCtl.WebBrowser_V1对象捕获NewWindow事件.

注意:代码来自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();
}
Run Code Online (Sandbox Code Playgroud)

  • 我认为它位于%WINDIR%\ system32\shdocvw.dll (4认同)
  • 在找到这个之前我必须阅读的所有无用的废话+100. (3认同)