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

What is the recommended way to call a javascript function from C# using the WinForms GeckoFX control?

本文关键字:方法 是什么 函数 JavaScript GeckoFX WinForms 控件 调用 使用      更新时间:2023-09-26

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

我应该能够做这样的事情:

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

。在网络代码中:

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

谢谢 - 戴夫

您可以使用导航执行此操作:

browserControl.Navigate("javascript:void(myFunction('Dave','Smith'))");

请注意,我发现在应用程序事件循环执行之前,代码实际上不会运行。如果这对您来说是一个问题,您也许可以按照导航呼叫进行操作

Application.DoEvents();

请确保考虑显式调用 DoEvents 的危险。

我知道AutoJSContext类,所以没有必要将javascript传递给Navigate()。

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

亲爱的@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);
}

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

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