使用WinForms GeckoFX控件从C#调用javascript函数的推荐方法是什么?

时间:2012-08-17 16:20:40

标签: c# javascript winforms geckofx

问题说明了一切。我已将所有内容都连接起来并知道如何将消息从浏览器html发送到c#,但不是其他方式。

我应该可以做类似的事情:

browserControl.JSCall("myFunction('Dave','Smith');");

...并在网络代码中:

   function myFunction(firstName, lastName) {
       $("#mydiv").text(firstName + ' ' + lastName);
   }

谢谢 - 戴夫

4 个答案:

答案 0 :(得分:2)

您可以使用导航:

执行此操作
browserControl.Navigate("javascript:void(myFunction('Dave','Smith'))");

注意,我发现在应用程序事件循环执行之前,代码实际上并未运行。如果这对您来说是个问题,您可以使用

跟随导航呼叫
Application.DoEvents();

请务必考虑dangers of calling DoEvents explicitly

答案 1 :(得分:2)

我知道AutoJSContext类,所以不需要将javascript传递给Navigate()。

    string outString = "";
    using (Gecko.AutoJSContext java = new Gecko.AutoJSContext(geckoWebBrowser1.JSContext))
    {
          java.EvaluateScript(@"window.alert('alert')", out outString );
    }

答案 2 :(得分:0)

除了使用Navigate方法之外,还有另一种解决方法:

var script = geckofx.Document.CreateElement("script");
script.TextContent = js;
geckofx.Document.GetElementsByTagName("head").First().AppendChild(script);

答案 3 :(得分:0)

亲爱的@SturmCoder和@DavidCornelson是正确的。 但对于版本60.0.24.0

geckoWebBrowser1.JSCall()

Gecko.AutoJSContext(),它接受 geckoWebBrowser1.JSContext

已过时,而不是 geckoWebBrowser1.JSContext ,您应该编写 geckoWebBrowser1.Window

对我来说,此代码有效:

string result = "";
using (Gecko.AutoJSContext js= new Gecko.AutoJSContext(geckoWebBrowser1.Window))
{
    js.EvaluateScript("myFunction('Dave','Smith');", out result);
}

或者即使网站具有jQuery,您也可以这样运行:

string result = "";
using (Gecko.AutoJSContext js= new Gecko.AutoJSContext(geckoWebBrowser1.Window))
{
    js.EvaluateScript(@"alert($('#txt_username').val())", out result);
}