PräambelKind Ankerelement erhält Kontrolle innerhalb WebBrowser
Ich verwende die WebBrowser
Steuerung, die ein Benutzer mit interagieren, so dass eine Lösung benötigen, um mit einer sichtbaren WebBrowser
Kontrolle zu arbeiten.
Frage
Wie kann ich überprüfen, ob ein Element einen Anker als ein Kind? Alle Browser können unterscheiden, dass ein Element einen Anker enthält (<a href=""...
), und bieten die Funktion "In neuem Tab öffnen". Das versuche ich zu reproduzieren. Wenn ich jedoch mit der rechten Maustaste auf eine HtmlElement
klicke, kann ich nur das übergeordnete Element erhalten.
Beispiel
Unter der BBC-Website als Beispiel, wenn ich auf dem markierten Elemente rechts klicken (Bild unten), meine Ausgabe ist DIV
, aber sehen Sie den Quellcode gibt es ein Ankerelement als Kind davon div
.
SSCCE
using System;
using System.Diagnostics;
using System.Windows.Forms;
namespace BrowserLinkClick
{
public partial class Form1 : Form
{
private WebBrowser wb;
private bool firstLoad = true;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
wb = new WebBrowser();
wb.Dock = DockStyle.Fill;
Controls.Add(wb);
wb.Navigate("http://bbc.co.uk");
wb.DocumentCompleted += wb_DocumentCompleted;
}
private void Document_MouseDown(object sender, HtmlElementEventArgs e)
{
if (e.MouseButtonsPressed == MouseButtons.Right)
{
HtmlElement element = wb.Document.GetElementFromPoint(PointToClient(MousePosition));
//I assume I need to check if this element has child elements that contain a TagName "A"
if (element.TagName == "A")
Debug.WriteLine("Get link location, open in new tab.");
else
Debug.WriteLine(element.TagName);
}
}
private void wb_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
if (firstLoad)
{
wb.Document.MouseDown += new HtmlElementEventHandler(Document_MouseDown);
firstLoad = false;
}
}
}
}
Testen Sie jede vorgeschlagene Lösung die BBC-Website und die markierte Überschrift (die Überschrift ändert, aber das DOM bleibt gleich) verwendet wird.
Leider gibt dies immer noch nicht das 'a'-Tag für mein Beispiel zurück. Kannst du es mit dem BBC-Beispiel von meinem ursprünglichen Beitrag versuchen und sehen, ob das für dich der Fall ist? Die Nachricht wurde geändert, die DOM-Struktur bleibt jedoch unverändert. – TEK