使用 .NET WebBrowser 控件时,如何使用相同的会话在新窗口中打开链接(即..不要在服务器上启动新的 ASP.NET 会话),或者如何捕获新窗口事件以在同一个 WebBrowser 控件中打开 URL?
Greg Bray
问问题
28920 次
3 回答
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();
}
于 2008-10-06T19:40:05.637 回答
3
稍微清理了格雷格答案的版本。它修改传入控件的行为,而不是依赖于全局变量。用法:
InlinePopups(webBrowser1);
代码:
// 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);
});
}
当然,仍然需要对 %WINDIR%\system32\shdocvw.dll 的引用。
于 2013-05-06T15:02:20.037 回答
1
如果您没有将actuasl 对象添加到您的工具箱(shwos 为“Microsoft 浏览器”),则将对 shdocvw.dll 的引用添加到您的项目后,然后在代码顶部定义该对象:
将事件 Web_V1 调暗为 SHDocVw.WebBrowser_V1
于 2020-07-22T16:42:39.123 回答