C# 如何确保ExecuteScriptAsync在CefSharp中执行
我正在Windows Forms C#应用程序中使用组件 我在chromium浏览器中加载我的页面,加载后,我使用C# 如何确保ExecuteScriptAsync在CefSharp中执行,c#,.net,winforms,cefsharp,C#,.net,Winforms,Cefsharp,我正在Windows Forms C#应用程序中使用组件 我在chromium浏览器中加载我的页面,加载后,我使用ExecuteScriptAsync单击其中的一个按钮并关闭表单 代码正常执行,但由于这种情况发生得非常快,我如何确保页面中的按钮被真正单击 这是我的密码: private void OnLoadingStateChanged(object sender, LoadingStateChangedEventArgs args) { if (!args.IsLoading)
ExecuteScriptAsync
单击其中的一个按钮并关闭表单
代码正常执行,但由于这种情况发生得非常快,我如何确保页面中的按钮被真正单击
这是我的密码:
private void OnLoadingStateChanged(object sender, LoadingStateChangedEventArgs args)
{
if (!args.IsLoading)
{
chromeBrowser.ExecuteScriptAsync("document.getElementById('myButton').click();");
form1.Close();
}
}
谢谢。正如文档中已经提到的,当您使用时,脚本将异步执行,因此方法将在脚本实际执行之前返回 使用
EvaluateScriptAsync
并等待调用,而不是立即返回的ExecuteScriptAsync
如果使用,则脚本将异步执行,并且该方法返回一个封装脚本响应的任务
示例
Load
事件:
ChromiumWebBrowser browser;
private void Form1_Load(object sender, EventArgs e)
{
browser = new ChromiumWebBrowser("http://www.google.com");
browser.LoadingStateChanged += async (obj, args) =>
{
if (!args.IsLoading)
{
await browser.EvaluateScriptAsync("alert(Math.sin(Math.PI/2));");
this.Invoke(new Action(() =>
{
this.Close();
}));
}
};
this.Controls.Add(browser);
}
请确保包括以下用法:
using CefSharp;
using CefSharp.WinForms;
ExecuteScriptAsync
,表单将立即关闭,您可能看不到警报
谢谢@Reza AghaeiYou,欢迎:)