2009-03-26 9 views
5

Ich möchte Javascript in meinem C# -Programm hosten. Ich möchte Benutzern erlauben, benutzerdefinierten Javascript-Code zu schreiben, und lassen Sie meine C# -Programm ihre Funktionen ausführen, und erlauben Sie den Benutzern, meine Framework-Code zu verwenden.Wie kann ich C# zum Interop mit Javascript bekommen?

Ist es möglich, dies zu tun? Wenn das so ist, wie?

Edit: Um klar zu sein, bin ich nicht mit ASP.NET für dieses Projekt.

+0

Kann dies von einer Webseite sein, oder muss es von einer Winform sein? – RossFabricant

+0

Idealerweise sollte es unabhängig von der Schnittstelle funktionieren ... –

+0

Siehe [diese Frage] (http://stackoverflow.com/questions/268320/execute-a-jascript-function-in-a-c-application). –

Antwort

3

Sie können auch ein Webbrowser-Steuerelement verwenden, um das JavaScript in einem HTML-Dokument zu hosten. Um zwischen den beiden zu interagieren, würden Sie eine COM-Klasse sichtbar machen und eine Instanz davon auf die ObjectForScripting-Eigenschaft setzen.

Alle öffentlichen Mitglieder der 'externen' Klasse sind jetzt über window.external in Javascript zugänglich. Außerdem können Sie auf der Seite des verwalteten Codes die InvokeScript-Methode des Dokuments verwenden, um alle JavaScript-Funktionen aufzurufen.

So ist es einfach, komplexe Objekte zwischen den beiden zu übergeben.

Ich habe diese Idee in dieser Google Earth Api-Anwendung ziemlich oft verwendet. http://fraserchapman.blogspot.com/2008/08/google-earth-plug-in-and-c.html

+0

Ah, ausgezeichnet! In meinem vorherigen googling hatte ich Leute gefunden, die den Ansatz des Webbrowser-Controllers vorschlugen, aber ohne jede Erklärung bot ich an, dass die Vorschläge außerhalb meines Anwendungsfalls lagen. Danke =) –

+0

Wenn Sie dieses Beispiel auch überprüfen, können Sie etwas komplexere Interaktion sehen, einschließlich die Fähigkeit, Javascript zur Laufzeit zu injizieren ... Siehe das IHTMLScriptElement.cs in der Quelle. http://code.google.com/p/winforms-geplugin-control-library/ - Fraser – Fraser

0

Sie sicher Javascript nativ von C# ausführen können - siehe this article für einen Starter. Der Javascript-Zugriff auf Ihr Framework könnte jedoch ein Trick sein. Vielleicht könnte Script# helfen?

+0

Skript # würde helfen, das JS zu schreiben, aber ich denke nicht, dass es ihm helfen würde, .NET-Code von JS aufzurufen. – bdd

0

Es gibt HTML-Komponenten, wo Sie JavaScript einbetten können. Auf der anderen Seite ist das Richtige ein ASP.NET-Webdienst. Vielleicht können Sie beides mit einem Smart Client kombinieren.

2

Ich kann Ihnen wärmstens empfehlen, die Microsoft Dynamic Langauage Runtime (DLR) zu verwenden. Es ist der Zweck im Leben, das Scripting in einer .Net-Umgebung zu erleichtern. Das DLR ist nicht Skript-spezifisch, daher werden im Laufe der Zeit mehr Skriptsprachen aufgebaut, aber im Moment sind mir IronRuby, IronPython und JScript bekannt.

+0

Ich kann diesen Weg gehen, aber ich mag JavaScript als Sprache. Es wäre wirklich schön, wenn es eine DLR-Implementierung von JavaScript gäbe, aber bis jetzt habe ich nichts in diesem Raum gesehen. –

+0

Früher gab es in den frühen Beispielen für die Microsoft.Scripting-Bibliothek JScript-Beispiele. Ich habe gelesen, dass es nicht mehr gepflegt wird. – sipwiz

+0

Ja, Sie würden DLR und Type Dynamic verwenden - aber Sie müssten immer noch die JS in einem Browser-Steuerelement hosten und eine COM-sichtbare Klasse erstellen. Sobald dies erledigt ist, macht der DLR das Interop zu einem Kinderspiel, da Sie die Punktsyntax usw. verwenden können, und sich nicht mit Reflektion und Aufruf beschäftigen müssen. Allerdings wird der DLR das JS nicht für Sie ausführen, sondern den dynamischen Type lass dich einfach viel einfacher damit. – Fraser

1

Früher war dies der Windows Script Host, mit dem Sie entweder JSCript oder VBScript hosten konnten.

Verwandte Themen