我需要在我的应用程序中使用 Web 浏览器,因为它保留了员工的重复性任务,但是 javascript 存在问题,在单击锚点后会在 IE 中打开一个新窗口。如何告诉 Web 浏览器控件在我希望打开的位置“打开新窗口”?例如在其他网络浏览器控件中?
4 回答
我找到了一个有效的简单解决方案。
private void WebBrowser1_NewWindow(object sender, System.ComponentModel.CancelEventArgs e) {
e.Cancel = true;
WebBrowser1.Navigate(WebBrowser1.StatusText);
}
查看:使用源代码的 .NET System.Windows.Forms.WebBrowser 模块的概念验证
我对这些控件的经验让我看到了这个问题可以在接下来的步骤中尝试解决:
总是取消NewWindow事件
抓住所有链接点击
但并非所有链接都可以通过这种方式缓存,所以我决定在文档加载完成
<a>
时手动解析所有标签总的来说,这种控制很差,是微软故意这样设计的。尽管Webbrowser.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; } } }
在第一个链接中查看更多内容,这是主窗口的源代码,那里有很多不同的操作!
为什么这么复杂的答案伙计们?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 组件。
案例中有一个错误MouseBUttons.Left
:
错误 1 控件不能从一个案例标签 ('case 1048576:') 到另一个 C:\Documents and Settings\ever\My Documents\Visual Studio 2005\Projects\Desarrollo\wApp_SurverMonkey\wApp_SurverMonkey\frmNetcare.cs 64 17 wApp_SurverMonkey