<分区>
我正在尝试将新窗口事件重定向到新选项卡:
myWebBrowser.NewWindow += add_NewTab;
//...
private void add_NewTab(object sender, CancelEventArgs e)
{
WebBrowser thisWebBrowser = (WebBrowser)sender;
e.Cancel = true; //should block the default browser to open a new window
TabPage addedTabPage = new TabPage("redirected tab"); //create a new tab
tabControl_webBrowsers.TabPages.Add(addedTabPage); //add the new tab to the TabControl
WebBrowser addedWebBrowser = new WebBrowser() //create the new web browser inside the new tab
{
Parent = addedTabPage,
Dock = DockStyle.Fill
};
addedWebBrowser.Navigate(thisWebBrowser.StatusText.ToString()); //set the new browser destination url
}
我不确定使用 WebBrowser.StatusText
是获取新窗口 url 的最佳方式(这不适用于我测试过的每个站点)。
是否有更好的类/方法来调用以获取新窗口目标?
更新:
我已经尝试过查理建议的解决方案
- 添加了 Microsoft Internet Control (COM) 引用
- 使用 SHDocVw 添加;
使用代码:
System.Windows.Forms.WebBrowser myWebBrowser = new System.Windows.Forms.WebBrowser();
SHDocVw.WebBrowser axBrowser = (SHDocVw.WebBrowser)myWebBrowser.ActiveXInstance;
axBrowser.NewWindow3 += new DWebBrowserEvents2_NewWindow3EventHandler(Browser_NewWindow3);
不幸的是,我在第三行收到了一个我无法更正的 NullReference Exception
。
解决方案:
我认为相关答案中没有解决方案(或者我找不到它),因为它解释了如何实现 NewWindow2 事件(而不是处理原始目标 url 的 NewWindow3)并且实现是与此处建议的相同,这会导致 NullReference 异常错误。
不管怎样,我发现了这两篇文章:
- discussion
- original article (页面是中文的,但代码是 可读)
建议将前面三行改成这一行:
(myWebBrowser.ActiveXInstance as SHDocVw.WebBrowser).NewWindow3 += new SHDocVw.DWebBrowserEvents2_NewWindow3EventHandler(Browser_NewWindow3);
现在一切正常,我能够在所有其余代码中继续使用原始的 System.Windows.Forms.WebBrowser
。