我试图从C#执行javascript调用到GeckoFX控制器中加载的Document,我这样做:
public void evaluateScript(string command)
{
System.Diagnostics.Debug.WriteLine("evaluateScript: " + command);
using (Gecko.AutoJSContext context =
new AutoJSContext(geckoWebBrowser1.Window.JSContext))
{
string result;
context.EvaluateScript(
command,
(nsISupports)geckoWebBrowser1.Window.DomWindow,
out result);
}
}
Run Code Online (Sandbox Code Playgroud)
但这不起作用,我只发现作为一个解决方案来调用,geckoWebBrowser1.Navigate('javascript:functionName(1,2);');但有了这个,我无法从functionName恢复返回数据并使用它Navigate来进行JavaScript调用我认为是一个错误.有没有办法在DOM中调用JavaScript函数并在C#中接收它们的数据?
我找到了解决方案,在版本33中,API已经改变了一点,它更简单,因为默认情况下,如果传递参数,EvaluateScript将WebBrowser DOM作为默认上下文,并直接返回结果.
public void evaluateScript(string command)
{
System.Diagnostics.Debug.WriteLine("evaluateScript: " + command);
using (Gecko.AutoJSContext context = new AutoJSContext(geckoWebBrowser1.Window.JSContext))
{
var result = context.EvaluateScript(command, geckoWebBrowser1.Window.DomWindow);
}
}
Run Code Online (Sandbox Code Playgroud)
在旧版本中,需要指定EvaluateScript的上下文,我在此URL中找到了示例:https://nhabuiduc.wordpress.com/2014/09/18/geckofx-net-webbrowser-setup-and-features/