1

这些问题说明了一切。我已经把所有东西都连接好了,并且知道如何将消息从浏览器 html 发送到 c#,但不是相反。

我应该能够做类似的事情:

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

...在网络代码中:

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

谢谢 - 戴夫

4

4 回答 4

3

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

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

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

Application.DoEvents();

确保您考虑明确调用 DoEvents 的危险

于 2012-08-18T22:49:06.670 回答
2

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

    string outString = "";
    using (Gecko.AutoJSContext java = new Gecko.AutoJSContext(geckoWebBrowser1.JSContext))
    {
          java.EvaluateScript(@"window.alert('alert')", out outString );
    }
于 2013-04-08T23:08:24.030 回答
1

亲爱的@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);
}
于 2018-12-28T08:35:25.050 回答
0

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

var script = geckofx.Document.CreateElement("script");
script.TextContent = js;
geckofx.Document.GetElementsByTagName("head").First().AppendChild(script);
于 2012-11-21T22:52:27.073 回答