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