WinForms - Wie führe ich C# - code für die Anwendung von innen WebBrowser-control?
Ich habe ein Formular mit einem Webbrowser-Steuerelement. Das Webbrowser-Steuerelement geladen werden, die einige HTML-von Datenträger und zeigt ihn an. Ich möchte in der Lage sein einen button in der HTML-Zugriff von C# - code in meine form.
Beispielsweise eine Schaltfläche in das HTML könnte, rufen Sie die Close () - Methode auf das Formular.
Ziel-Plattform: C# und Windows Forms (jede version)
Du musst angemeldet sein, um einen Kommentar abzugeben.
Blick auf die WebBrowser.ObjectForScripting Eigenschaft. Geschafft, Google Maps sprechen, um eine windows forms-Anwendung mit dieser.
Habe ich implemeted dies in ein paar Anwendungen in die Vergangenheit, hier ist, wie: (Anmerkung: das Beispiel unten ist nicht für die Produktion geeignet und sollte verwendet werden, nur als Richtwert).
Erstellen Sie zunächst eine normale .NET-Klasse (öffentlich) enthält public-Methoden, die Sie anrufen möchten, aus Javasvcipt laufen in Ihrem web-browser Steuern.
Am wichtigsten, es muss dekoriert werden, mit dem ComVisible(true)] - Attribut aus dem System.- Laufzeit.InteropServices-namespace (Javascript im IE ist COM basiert). Es kann aufgerufen werden, nichts, ich habe als "Externer" um die Dinge klarer.
In der nächsten .NET-form, die Ihre web-browser-erstellen einer Instanz der COMVisible-Klasse, dann legen Sie die web-browser-Steuerelemente ObjectForScripting Instanz:
Schließlich, in der Javascript läuft im browser Steuern der Zugriff auf die .NET-Methoden über die Fenster.externe Objekt. In diesem Fall Fenster.externe tatsächlich verweist (indirekt über eine COM-interop wrapper) die "Externe" - Objekt erstellt oben:
Sich bewusst sein, dass Aufrufe von Javascript an .NET pass über die COM-interop-Schicht und damit die Abfrage des default-Schnittstelle marshalling von Parametern und dergleichen auftreten müssen. In anderen Worten, es kann relativ LANGSAM, so einige performance-Tests, wenn Sie planen, mehrere Anrufe zum Beispiel innerhalb einer Schleife.
Auch, gerade für die zukünftige Verweisung, den Aufruf von Javascript-code aus .NET ist einfacher, nutzen Sie einfach das Dokument.InvokeScript Methode:
Was ich in VB6:
Alles, was Sie tun müssen ist, fügen Sie einen Ereignishandler für das WebBrowser Navigieren Ereignis.
Dieses event wird ausgelöst, bevor der browser navigiert zur nächsten Seite. Es ermöglicht Ihnen, den Prozess unterbrechen und tun, was Sie wollen, einschließlich Abbrechen der navigation und den Aufruf in den code.
Ziemlich einfach zu bedienen. Die einzige Einschränkung, die ich begegnet bin, ist, dass Sie nicht anzeigen können die post-Daten -- siehe meine Frage hier: PostData Frage
Hier einige Beispiel-code:
Ist dies möglich, aber ich habe es nicht getan, in .NET.
Vor ein paar Jahren hatte ich eine C++ - Anwendung, die gehostete web-browser-Steuerelement (ActiveX). Aus dem HTML in der Kontrolle war es möglich, den Aufruf von 'heraus', um das ActiveX-Steuerelement und bekommen es zu tun Dinge.
Sollte das gleiche möglich sein .NET, obwohl die HTML-DOM/JavaScript nicht wissen über C#. Aber wenn Sie wickeln Ihre .NET-Funktionalität in ein COM-Objekt, Sie sollten in der Lage sein, um Methoden aufzurufen, die auf der COM/ActiveX-Objekte, die wiederum ein Aufruf der C# - code.
Hoffe, das hilft.
Habe ich dieses vor einigen Jahren und darüber gebloggt es hier:
http://matthewskelton.wordpress.com/2007/04/21/calling-javascript-from-c/
Insbesondere können Sie
Type.InvokeMember()
aufrufen, JavaScript von C#.