簡體   English   中英

使用WinForms GeckoFX控件從C#調用javascript函數的推薦方法是什么?

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

問題說明了一切。 我已將所有內容都連接起來並知道如何將消息從瀏覽器html發送到c#,但不是其他方式。

我應該可以這樣做:

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

......並在網絡代碼中:

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

謝謝 - 戴夫

您可以使用Navigate執行此操作:

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 );
    }

除了使用Navigate方法之外,還有另一種解決方法:

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

親愛的@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);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM