如何在C#WebBrowser上模拟“在新窗口上打开链接”?

时间:2010-08-06 07:23:32

标签: c# .net winforms webbrowser-control

我刚刚发现,为了模拟点击,我可以致电element.InvokeMember("click");,其中elementHtmlElement。但我真正需要的是在新窗口中打开链接,但不是在默认浏览器上,而是在我的程序中创建的另一个WebBrowser上。有时它只是通过调用element.GetAttribute("href");来获取href属性,然后导航到返回的URL,但是一些挑剔的网页不会以这种方式工作,我假设与cookie和会话有关。

2 个答案:

答案 0 :(得分:1)

System.Windows.Forms.WebBrowser是一个非常瘫痪的控制,也是它最大的问题之一 - 支持多标签。它根本不支持它。

我花了很多时间尝试让它正常工作但没有取得足够的成功,所以建议你尝试第三方控制。

解决方法:订阅页面上每个<a>的点击事件(或您需要的其中一些)并手动创建新窗口。例如,看看它是如何在dotBrowser中实现的:1 2

foreach (HtmlElement tag in webBrowser.Document.All)
{
    tag.Id = String.Empty;
    switch (tag.TagName.ToUpper())
    {
        case "A":
        {
            tag.MouseUp += new HtmlElementEventHandler(link_MouseUp);
            break;
        }
    }
}

private void link_MouseUp(object sender, HtmlElementEventArgs e)
{
    mshtml.HTMLAnchorElementClass a = (mshtml.HTMLAnchorElementClass)((HtmlElement)sender).DomElement;
    switch (e.MouseButtonsPressed)
    {
        case MouseButtons.Left:
        {
            // open new tab
            break;
        }
        case MouseButtons.Right:
        {
            // open context menu
            break;
        }
    }
}

答案 1 :(得分:0)

只需处理NewWindow2事件,创建一个包含webbrowser的表单/选项卡,并使用webbrowser作为新窗口请求的目标。请查看http://www.codeproject.com/KB/cpp/ExtendedWebBrowser.aspx以获取示例。