c# - 获取 WebBrowser.NewWindow 事件的 URL

标签 c# browser new-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
}

我不确定使用 WebBrowser.StatusText 是获取新窗口 url 的最佳方式(这不适用于我测试过的每个站点)。

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


更新:

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

  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);

现在一切正常,我能够在所有其余代码中继续使用原始的 System.Windows.Forms.WebBrowser

最佳答案

看起来 WebBrowser 控件是 SHDocVw 的一个非常蹩脚的包装器。幸运的是,Microsoft 通过 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);

关于c# - 获取 WebBrowser.NewWindow 事件的 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14871235/

相关文章:

javascript - 在提交表单之前提醒关闭子窗口

javascript - 有没有办法提交表单,然后打开一个新窗口?

C# 无法访问类的基本属性(只能继承)

c# - 如果 IRepository 调用没有返回值,则使用 Moq 解决测试依赖关系的目的

java - 使用 Java 获取有关标准浏览器的信息

javascript - Undersore 的 _.now 如何运作?

c# - 如何清除 OleDbConnection 的连接池

c# - 如何获取应用程序中使用的日历类型

javascript - 浏览器如何在编码标签内呈现此内联 JavaScript?

jquery - 不使用 `window.open` 或 `window.location.href` 打开新窗口/标签