在GeckoFX 33中从C#调用Javascript

时间:2015-03-24 22:43:33

标签: c# geckofx

我试图从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);
    }
}

但这不起作用,我只发现作为调用geckoWebBrowser1.Navigate('javascript:functionName(1,2);');的解决方案,但有了这个,我无法从functionName恢复返回数据并使用Navigate进行JavaScript调用我认为是一个错误。是否无法在DOM中调用JavaScript函数并在C#中接收数据?

1 个答案:

答案 0 :(得分:5)

我找到了解决方案,在版本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);
            }
        }

在旧版本中,需要指定EvaluateScript的上下文,我在此网址中找到了示例:https://nhabuiduc.wordpress.com/2014/09/18/geckofx-net-webbrowser-setup-and-features/