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

... 

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

我需要实现类似这样的事情。 JavaScript函数“jsFunctionName”是异步的,需要一个回调来捕获结果。将代理传递给WPF WebBrowser.InvokeScript方法

但是,InvokeScript方法的第二个参数接受一个Object数组。那么,如何将此C#方法/委托传递给InvokeScript方法?

编辑:

即使我们可以通过委托WebBrowser控件,将如何在控制脚本调用C#的委托?

回答

1

我建议你在看这篇文章的双向通信的实现细节与InvokeScript:通过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访问的方法。另外,我为我的Window类设置了[ClassInterface(ClassInterfaceType.None)]。 这样我可以在运行时消除NonComVisibleBaseClass错误。 – Shankar 2012-03-23 16:13:21