[英]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.