[英]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.