获取WebBrowser.NewWindow事件的URL

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是获取新窗口网址的最佳方式(这对我测试过的每个网站都不起作用).

是否有更好的类/方法来调用以获取新的窗口目的地?


更新:

我尝试过查理建议的解决方案

  1. 添加了Microsoft Internet Control(COM)参考
  2. 使用SHDocVw添加;
  3. 使用代码:

    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在所有其余代码中使用原始内容.

Cha*_*lie 7

看起来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)