2010-11-26 5 views

答えて

2

はい、限り、あなたはwebrowserコントロールのJSをホストとして。 ObjectForScriptingプロパティとdocumentプロパティをcom可視オブジェクトと共に使用することができます。実際には逆のことも当てはまります。つまり、JavaScriptからC#メソッドを呼び出すことができます。動的な型を使用すると、複雑なオブジェクトをリフレクションInvoke/GetPropertyなどを使用することなく渡すことができます。

ここは本当に簡単な例です。

[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

はい、C#からではなく、動的型を使用して、JavaScriptコードを呼び出すことが可能です。

代わりに、JScript.Netの評価機能を活用することができます。

次の資料ではこれを行うための基礎を持っている:

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

+1

リンクありがとうございましたが、私の質問です:あなたはLinkeのIronPythonまたはIronRubyのC#からjavascriptを呼び出すことは可能ですか? –

+0

Chibacityによると、現在のJScriptエンジンではdynamicキーワードを使用できないため、新しい構文の恩恵を受けることはありません。ただし、evalを使用してJavaScriptコードを呼び出すことはできます。 – JasonTrue

+1

@サンクトあなたの質問に対する答えは:いいえ、私はC#のJavaScriptとの相互運用性を達成するための代替手段を提供しました。 –

関連する問題