我需要在我的应用程序中使用Web浏览器,因为它会保留员工的重复性任务,但是在点击锚点后,javascript会在IE中打开一个新窗口。如何告诉Web浏览器控件“打开新窗口”我想要打开它?例如在其他Web浏览器控件中?
答案 0 :(得分:15)
我找到了一个有效的简单解决方案。
private void WebBrowser1_NewWindow(object sender, System.ComponentModel.CancelEventArgs e) {
e.Cancel = true;
WebBrowser1.Navigate(WebBrowser1.StatusText);
}
答案 1 :(得分:5)
查看:proof-of-concept of .NET System.Windows.Forms.WebBrowser module using源代码
我对这些控制的经验让我有了一个愿景,即这个问题可以在接下来的步骤中解决:
始终取消NewWindow活动
抓住all links点击
但并非所有链接都可以通过这种方式缓存,因此我决定在Document Loading Completion上手动解析所有代码<a>
一般来说,这种控制非常差,并且是故意由微软制作的。虽然Webrowser.Document.HtmlDocument和命名空间MSHTML
使用的示例是HtmlElement.DomElement
foreach(HtmlElement tag in webBrowser.Document.All)
{
switch (tag.TagName.ToUpper)
{
case "A":
{
tag.MouseUp += new HtmlElementEventHandler(link_MouseUp);
break;
}
}
}
void link_MouseUp(object sender, HtmlElementEventArgs e)
{
HtmlElement link = (HtmlElement)sender;
mshtml.HTMLAnchorElementClass a = (mshtml.HTMLAnchorElementClass)link.DomElement;
switch (e.MouseButtonsPressed)
{
case MouseButtons.Left:
{
if ((a.target != null && a.target.ToLower() == "_blank") ||
e.ShiftKeyPressed ||
e.MouseButtonsPressed == MouseButtons.Middle)
{
// add new tab
}
else
{
// open in current tab
}
break;
}
case MouseButtons.Right:
{
// show context menu
break;
}
}
}
在第一个链接中查看更多信息,这是主窗口的源代码,那里有很多不同的操作!
答案 2 :(得分:0)
为什么这么复杂的回答伙计? Abatischev,我很想看到你的大脑,应该很有趣......
试试这个:
Private Sub WB1_NewWindow(ByVal sender As System.Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles WB1.NewWindow
newUrl = WB1.Url.ToString
e.Cancel = True
WB1.Navigate(newUrl)
End Sub
现在,您可以将第二行更改为任何OWN表单中的WB2或任何其他WebBrowser组件。
答案 3 :(得分:-1)
案例MouseBUttons.Left
中存在错误:
错误1控件不能从一个案例标签('案例)中删除 1048576:')到另一个C:\ Documents and Settings \ ever \ My Documents \ Visual Studio 2005 \ Projects \ Desarrollo \ wApp_SurverMonkey \ wApp_SurverMonkey \ frmNetcare.cs 64 17 wApp_SurverMonkey