2012-03-22 6 views
2
public void ProcessResult(string result) 
{ 
    this.MyTextBox.Text = result; 
} 

... 

this.WebBrowser.InvokeScript("jsFunctionName", ProcessResult); 

私はこれを達成する必要があります。 JavaScript関数 "jsFunctionName"は非同期で、結果をキャプチャするコールバックが必要です。WPF WebBrowser.InvokeScriptメソッドにデリゲートを渡す

ただし、InvokeScriptメソッドの2番目のパラメータは、オブジェクトの配列を受け入れます。では、このC#メソッド/デリゲートをInvokeScriptメソッドに渡すにはどうすればよいですか?

EDIT:

我々はWebBrowserコントロールにデリゲートを渡すことができたとしても、どのようにコントロール内のスクリプトは、C#のデリゲートを呼び出しますか?私はInvokeScriptとの双方向通信の実装の詳細については、この記事を見てお勧めします

答えて

1

http://msdn.microsoft.com/en-us/library/a0746166.aspx

また、渡されたオブジェクトは、コールバックが、引数はありません。メソッドを渡す場合は、必要な接頭辞を持つメソッド名を文字列として関数に渡します。

ここで(単純な呼び出しとして使用することが懸念されるものの、ボタンのクリックを経由して)コールは、JS側から編成されている方法を示して簡単なコードです:任意のメソッドを呼び出す問題がある場合

<button onclick=\"window.external.Test('called from script code')\>...</button> 

jsから、文字列関数名をとり、必要な関数を呼び出すジェネリック関数を自由に実装することができます。

public void CallMethod(string methodName, params object[] parameters) 
{ 
    ... 
} 
+0

ありがとう!これとは別に、インタフェースを作成して[ComVisible(true)]を作成しなければならず、インタフェースにはJavaScriptからアクセス可能なメソッドが含まれていました。また、私は[ClassInterface(ClassInterfaceType.None)]を私のWindowクラスに設定しました。 このようにして、実行時にNonComVisibleBaseClassエラーを取り除くことができます。 – Shankar

関連する問題