Zu erkennen, wie die Ausführung von Javascript im WebBrowser-Steuerelement
Ich habe eine WebBrowser
- Steuerelement in meiner C# - Anwendung. Der web-browser ist unter der Kontrolle des Benutzers, das heißt, er kann laden Sie eine beliebige web-Seite von seinem computer auf der web-Zugriff (natürlich begrenzt durch proxy, hosts-Datei und so weiter).
Muss ich wissen und benachrichtigt werden, wenn es einen Javascript-Aufruf innerhalb der Seite geladen im web-browser-Komponente.
Ersten Beispiel: da ein link wie dieser
<a href="javascript:void(0)" onclick="jsFunct();">test</a>
Wenn der Benutzer auf den link klickt, muss ich wissen, ob die Funktion "jsFunct" genannt wurde.
Zweite Beispiel: gegeben sei ein Aufruf wie
<script type="text/javascript">
window.setTimeout("jsFunct()", 1000);
</script>
Muss ich wissen, dass 1 Sekunde nach Ausführung des Skripts die Funktion jsFunct aufgerufen wurde.
Das beste, was wäre, wenn ein Ereignis ausgelöst, wenn die Funktion aufgerufen wird. Es wäre auch toll, wenn die Veranstaltung konnte sich der Javascript-code ausgeführt, oder zumindest den Namen der Funktion in der Argumentation.
EDIT:
Selbst wenn die Frage im Zusammenhang mit der webbrowser-Komponente, alles, was dem Benutzer ermöglicht, zu erkennen, javascript-Aktivierung (auch per js) wäre schön, in der Lage zu injizieren ein js für das javascript-event und übergibt es dem wb control auslösenden Ereignisses, die damit umgehen können.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie
window.external
zum Aufruf einer C# - Methode, wenn eine Globale Funktion ausgelöst wird, in JavaScript. Sehen WebBrowser-Control Im Überblick für details auf die Fenster.externe.Müssen Sie ObjectForScripting: Webbrowser-Steuerelement-Fenster.extern ist IMMER null. für diese zu arbeiten.
Nehmen @Krishna ' s Antwort hinzufügen der JavaScript-Funktionen (aber drop jQuery, weil es wird nicht mehr benötigt):
JavaScript unten (InjectMonitor.js) finden sich alle globalen Funktionen und fügen Sie Ihre Behandlungsroutine:
In diesem Beispiel aus Hinzufügen der Konsole für Alle Funktionen, es meldet nur den Anruf zu trösten; aber mit dem Fenster.externe könnten Sie schicken eine Nachricht zurück zu Ihrem C# - Anwendung mit den details, welche Funktion aufgerufen wurde, die vom client.
Schließlich, hier ist ein JS-Beispiel Bin (es laufen und vergessen Sie nicht die Konsole): JS Bin-Beispiel
window.external
? Ein kleines code-Beispiel wäre auch geschätzt werdenWebBrowser.Head
? dies ist ein Beispiel und du meinstWebBrowser.Document.GetElementsByTagName("head")[0]
?Auf dem webbrowser-load-Ereignis,
Ihre Datei InjectMonitor.js sollte so etwas wie dieses
a
), nicht aber im zweiten. Trotzdem dankeGut, was krishna beantwortet hat, ist interms von reinen javascript-Befestigung an events, doch sehe ich, dass Sie vielleicht brauchen, um zu befestigen, es werden alle tags(a,p,div,input) etc und alle Ereignisse an jedem tag.
ich glaube, dass das ein anderer Weg ist, zu spielen, um mit der BHO(browser helper object) zur Verfügung, um Ihr in .net, und wenn nicht, und Sie sind gut bei VC++ und MFC, Sie können auch spielen, um mit Windows-Hooks.
setTimeout
. Außerdem was ist, wenn ein Klick nicht auslösen, ein javascript-Aufruf? Nicht gut. Ich müssen zu erkennen, die Ausführung einer javascript-Funktion, wenn es passiert, soll es aufgerufen werden, in einen event-handler ausgelöst durch einen timeout oder in jeder anderen Weise.