2009-03-26 4 views
5

Mi piacerebbe ospitare Javascript nel mio programma C#. Vorrei consentire agli utenti di scrivere codice JavaScript personalizzato e far eseguire al mio programma C# le loro funzioni, nonché consentire agli utenti di utilizzare il mio codice framework.Come posso ottenere C# per interoperare con Javascript?

È possibile farlo? Se é cosi, come?

Modifica: Per essere chiari, sono non utilizzando ASP.NET per questo progetto.

+0

Può essere da una pagina Web o deve essere da una winform? – RossFabricant

+0

Idealmente dovrebbe funzionare indipendentemente dall'interfaccia ... –

+0

Vedere [questa domanda] (http://stackoverflow.com/questions/268320/execute-a-javascript-function-in-a-c-application). –

risposta

3

è anche possibile utilizzare un controllo del browser per ospitare il javascript in un documento html, per interagire tra i due si dovrebbe creare una classe COM visibile e impostarne un'istanza nella proprietà ObjectForScripting.

Tutti i membri pubblici della classe "esterna" sono ora accessibili tramite window.external in javascript. Inoltre, dal lato del codice gestito è possibile utilizzare il metodo InvokeScript del documento per chiamare qualsiasi funzione javascript.

In questo modo è facile passare oggetti complessi tra i due.

Ho usato questa idea un po 'in questa applicazione API di Google Earth. http://fraserchapman.blogspot.com/2008/08/google-earth-plug-in-and-c.html

+0

Ah, eccellente! Nel mio precedente googling ho trovato persone che suggerivano l'approccio del controllo del browser, ma senza alcuna spiegazione ho pensato che i suggerimenti fossero al di fuori del mio caso d'uso. Grazie =) –

+0

Se si controlla anche questo esempio, è possibile vedere alcune interazioni più complesse, inclusa la possibilità di iniettare javascript in fase di esecuzione ... Vedere IHTMLScriptElement.cs nell'origine. http://code.google.com/p/winforms-geplugin-control-library/ - Fraser – Fraser

0

Si può certamente eseguire Javascript in modo nativo da C# - vedi this article per un antipasto. Avere l'accesso Javascript al tuo framework potrebbe essere più complicato, però. Forse Script# potrebbe aiutare?

+0

Script # aiuterebbe a scrivere il JS ma non penso che lo aiuterebbe a chiamare il codice .NET da JS. – bdd

0

Ci sono componenti HTML in cui è possibile incorporare JavaScript. Per il resto la cosa giusta è un servizio web ASP.NET. Forse con un client intelligente puoi combinarli entrambi.

2

Consiglio vivamente di utilizzare lo Microsoft Dynamic Langauage Runtime (DLR). Lo scopo della vita è facilitare lo scripting in un ambiente .Net. Il DLR non è uno script specifico, quindi nel tempo verranno creati altri linguaggi di script, ma al momento quelli che conosco sono IronRuby, IronPython e JScript.

+0

Posso andare su questa rotta, ma mi piace JavaScript come lingua. Sarebbe davvero bello se ci fosse un'implementazione DLR di JavaScript, ma fino ad oggi non ho visto nulla in quello spazio. –

+0

In passato, i primi esempi per la libreria Microsoft.Scripting disponevano di esempi JScript. Ho letto che non viene più mantenuto. – sipwiz

+0

Sì, si utilizzerà il DLR e il Tipo dinamico, ma si dovrà comunque prima ospitare il JS in un controllo del browser e creare una classe COM visibile. Una volta fatto ciò, il DLR rende l'interoperabilità un gioco da ragazzi, poiché è possibile utilizzare la sintassi del punto, ecc. E non deve preoccuparsi del riflesso e dell'invocazione, tuttavia, il DLR non eseguirà il JS per te, esso e il Tipo dinamico lo lasciatelo IO con molto più facilmente. – Fraser

1

Il modo per eseguire questa operazione era Windows Script Host, che consentiva di ospitare JSCript o VBScript.