2010-11-26 4 views

Répondre

2

Oui, aussi longtemps que vous hébergez les js dans un contrôle webrowser. Vous pouvez utiliser les propriétés ObjectForScripting et document pour cela avec un objet com visible. En effet, le contraire est également vrai, c'est-à-dire que vous pouvez appeler les méthodes C# à partir de JavaScript. Le type dynamique vous permet de passer et de travailler avec des objets complexes sans avoir à utiliser la réflexion Invoke/GetProperty, etc.

Voici un exemple très simple.

[ComVisibleAttribute(true)] 
public class Ofs 
{ 
    public void MethodA(string msg) 
    { 
     MessageBox.Show(msg); // hello from js! 
    } 
} 

public class Form1 
{ 

    void Form1() 
    { 
    WebBrowser b = new WebBrowser(); 
    b.DocumentText = "<script>" 
     + "var a = [];" 
     + "a.foo = 'bar!'"; 
     + "var jsFunc=function(y){alert(y);}" 
     + "var jsFunc2=function(){return a;}" 
     + "window.external.MethodA('hello from js!');</script>"; 

    b.ObjectForScripting = new Ofs(); // we can call any public method in Ofs from js now... 
    b.Document.InvokeScript("jsFunc", new string[] { "hello!" }); // we can call the js function 
    dynamic a = (dynamic)b.Document.InvokeScript("jsFunc2"); // c#'a' is js'a' 
    string x = a.foo; 
    MessageBox.Show(x); // bar! 
    } 
} 
0

Oui, il est possible d'appeler du code Javascript de C#, mais pas en utilisant des types dynamiques. Au lieu de cela, vous pouvez utiliser la fonctionnalité eval de JScript.Net pour cela.

L'article suivant présente les bases de le faire:

http://odetocode.com/Code/80.aspx

+1

Merci pour votre lien mais ma question est: Est-il possible d'appeler javascript de C# juste ironke IronPython ou IronRuby? –

+0

Comme l'a dit Chibacity, vous ne pouvez pas utiliser le mot-clé dynamic avec le moteur JScript actuel, il ne bénéficiera donc pas de la nouvelle syntaxe. Cependant, vous pouvez appeler du code JavaScript en utilisant eval. – JasonTrue

+1

@santosh La réponse à votre question est: Non. J'ai fourni une alternative à l'interopérabilité avec JavaScript de C#. –

Questions connexes