我在c#应用程序中使用WebBrowser
控件,我想在其中打开网页。
它完全完成了。
我的问题:
网页中其目标为_blank
的任何链接都将在新的IE窗口中打开。
我想在我的应用程序的新标签页中打开此类链接。
怎么做?
谢谢!
答案 0 :(得分:2)
private void Browser_ProgressChanged(object sender, WebBrowserProgressChangedEventArgs e)
{
var webBrowser = (WebBrowser)sender;
if (webBrowser.Document != null)
{
foreach (HtmlElement tag in webBrowser.Document.All)
{
if (tag.Id == null)
{
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)
{
var 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)
{
AddTab(a.href);
}
else
{
CurrentBrowser.TryNavigate(a.href);
}
break;
}
case MouseButtons.Right:
{
CurrentBrowser.ContextMenuStrip = null;
var contextTag = new ContextTag();
contextTag.Element = a;
contextHtmlLink.Tag = contextTag;
contextHtmlLink.Show(Cursor.Position);
break;
}
}
}
上查看更多信息
答案 1 :(得分:1)
这似乎是浏览器控件的常见问题。它并不是一个功能齐全的浏览器,标签式浏览和弹出窗口之类的东西也很痛苦。
我在网上发现的很多东西都只是说“你不能用这种控制来做到这一点。”真的是一种警察。但我过去偶然发现this project扩展了控件以添加其他功能。它有点老了,我还没有真正使用它。但它声称通过“标签”或MDI控件对目标链接提供额外支持。可能值得一试。
答案 2 :(得分:0)
有两种方法可以解决这个问题。两种方法都以捕获click事件开始,然后检测是否单击了“a”元素。
方法1只需获取网址,取消点击,然后打开新标签页。只需在正确的位置实例化一个新的WebBrowser控件即可打开一个新选项卡。
方法2只是从_blank
删除target
,以便在当前浏览器上打开页面,而不是生成另一个浏览器窗口。
private void Go(string url)
{
webBrowser1.Navigate(url);
webBrowser1.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(webBrowser1_DocumentCompleted);
}
void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
webBrowser1.Document.Click += new HtmlElementEventHandler(Document_Click);
}
void Document_Click(object sender, HtmlElementEventArgs e)
{
HtmlElement ele = webBrowser1.Document.GetElementFromPoint(e.MousePosition);
while (ele != null)
{
if (ele.TagName.ToLower() == "a")
{
// METHOD-1
// Use the url to open a new tab
string url = ele.GetAttribute("href");
// TODO: open the new tab
e.ReturnValue = false;
// METHOD-2
// Use this to make it navigate to the new URL on the current browser/tab
ele.SetAttribute("target", "_self");
}
ele = ele.Parent;
}
}
但请注意,这些方法不会阻止浏览器窗口通过JavaScript在应用程序外部打开。