Mav*_*751 3 c# browser new-window
我正在尝试将新的Window事件重定向到新选项卡:
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
}
Run Code Online (Sandbox Code Playgroud)
我不确定使用WebBrowser.StatusText是获取新窗口网址的最佳方式(这对我测试过的每个网站都不起作用).
是否有更好的类/方法来调用以获取新的窗口目的地?
更新:
我尝试过查理建议的解决方案
使用代码:
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异常错误.
无论如何,我发现了这两个帖子:
建议将前三行修改为这一行:
(myWebBrowser.ActiveXInstance as SHDocVw.WebBrowser).NewWindow3 += new SHDocVw.DWebBrowserEvents2_NewWindow3EventHandler(Browser_NewWindow3);
Run Code Online (Sandbox Code Playgroud)
现在一切正常,我能够继续System.Windows.Forms.WebBrowser在所有其余代码中使用原始内容.
看起来WebBrowser控件是一个非常蹩脚的包装器SHDocVw.幸运的是,微软公开了底层实现WebBrowser.ActiveXInstance.
来自http://www.codeproject.com/Articles/71592/How-to-easily-capture-the-NewWindow3-event-and-det的代码可以解决这个问题:
首先,添加一个引用Microsoft Internet Controls.然后实现NewWindow3处理程序:
SHDocVw.WebBrowser axBrowser = (SHDocVw.WebBrowser)webBrowser.ActiveXInstance;
axBrowser.NewWindow3 += new DWebBrowserEvents2_NewWindow3EventHandler(Browser_NewWindow3);
Run Code Online (Sandbox Code Playgroud)