Sku*_*uta 9 .net webbrowser-control winforms
我需要在我的应用程序中使用Web浏览器,因为它保留了员工的重复性任务,但是在点击锚点后,javascript会在IE中打开一个新窗口.如何告诉Web浏览器控件"打开新窗口"我希望它打开?例如在其他Web浏览器控件中?
小智 15
我找到了一个有效的简单解决方案.
private void WebBrowser1_NewWindow(object sender, System.ComponentModel.CancelEventArgs e) {
e.Cancel = true;
WebBrowser1.Navigate(WebBrowser1.StatusText);
}
Run Code Online (Sandbox Code Playgroud)
查看:使用源代码的.NET System.Windows.Forms.WebBrowser模块的概念验证
我对这种控制的经验给了我一个愿景,即这个问题可以在接下来的步骤中解决:
总是取消NewWindow活动
抓住所有链接点击
但并非所有链接都可以通过这种方式缓存,因此我决定<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;
}
}
}
Run Code Online (Sandbox Code Playgroud)在第一个链接中查看更多信息,这是主窗口的源代码,那里有很多不同的操作!