| 

.NET C# Java Javascript Exception

3
Hallo,

ich entwickle eine WPF Anwenung, die ein Webbrowser Control verwendet, um eine Seite aus dem Internet zu laden. Auf dieser Seite kann man zu seinen Rechungdaten navigieren.
Wenn man auf eine Rechnung klickt, öffnet sich ein neues IE Fenster.
Ich würde gerne den HTML Code einer Rechnung in meinem Programm abgreifen, um die Rechnungsdaten zu verarbeiten. Wenn aber für die Rechnung ein neues Fenster geöffnet wird, klappt das nicht. Die Rechnung müsste als aktuelle Seite im Webbrowser Control geladen sein.
Kann ich irgendwie auf das onClick=window.open in der Seite Einfluss nehmen? Kommt man mit HTMLDocument an die onClick Elemente ran?
Oder könnte man die Click Events im Control nicht abfangen? Allerdings habe ich gelesen, dass das HTMLDocument die Events nicht ans Control bubbelt.

Vielleicht hat ja jemand einen Lösungsansatz?

Grüße

:-)
07.05.2012
petergerd 1 1 1
2 Antworten
0
Aus irgend einem Grund hat Microsoft unter WPF die Eigenschaft "Document" verhunzt.
Unter Windows Forms war deine Aufgabe einfach mit
webBrowser1.Document.Click
zu erledigen.

Unter WPF musst du zunächst die Assembly Microsoft.mshtml referenzieren und dann das Document in ein paar Merkwürdige Interfaces casten. Dann klappt's:

public MainWindow()
{
InitializeComponent();

browser.Navigate("http://www.google.de/");

browser.Navigated += new NavigatedEventHandler(browser_Navigated);
}

void browser_Navigated(object sender, NavigationEventArgs e)
{
var doc = browser.Document as HTMLDocument;
mshtml.HTMLDocumentEvents2_Event iEvent = (mshtml.HTMLDocumentEvents2_Event)doc;

iEvent.onclick += new HTMLDocumentEvents2_onclickEventHandler(iEvent_onclick);
}

bool iEvent_onclick(IHTMLEventObj pEvtObj)
{
System.Windows.MessageBox.Show("clicked!");

return true;
}
07.05.2012
kleffel 654 1 9
0
Hallo kleffel,

erst mal danke für deine Antowrt. Das funktioniert :-)
Allerdings ist das entsprechende Element ein Frame. Und
da klappt es nicht mit:

mshtml.HTMLDocumentEvents2_Event iEvent = (mshtml.HTMLDocumentEvents2_Event)doc.activeElement

acitve Element ist dann halt das Frame. Sicher gibt doch einen Weg? Ich bastel mal noch ein wenig in diese Richtung.

Grüsse

:-)
07.05.2012
petergerd 1 1 1

Stelle deine .net-Frage jetzt!
TOP TECHNOLOGIES CONSULTING GmbH