繁体   English   中英

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

[英]How to simulate a “open link on new window” on a C# WebBrowser?

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM