[英]how to be sure that ExecuteScriptAsync is executed in CefSharp
我在 Windows Forms C# 應用程序中使用CefSharp組件。
我在 chromium 瀏覽器中加載我的頁面,一旦加載,我使用ExecuteScriptAsync
單擊其中的一個按鈕並關閉表單。
代碼正常執行,但是由於這發生得很快,我怎么能確定頁面中的按鈕真的被點擊了呢?
這是我的代碼:
private void OnLoadingStateChanged(object sender, LoadingStateChangedEventArgs args)
{
if (!args.IsLoading)
{
chromeBrowser.ExecuteScriptAsync("document.getElementById('myButton').click();");
form1.Close();
}
}
謝謝。
正如文檔中已經提到的,當您使用ExecuteScriptAsync
時,腳本將異步執行,因此該方法在腳本實際執行之前返回。
代替立即返回的ExecuteScriptAsync
,使用EvaluateScriptAsync
並等待調用。
如果您使用EvaluateScriptAsync
,腳本將異步執行,並且該方法返回一個封裝腳本響應的任務。
例子
創建 Windows Forms 應用程序。
安裝CefSharp.WinForms NuGet package。
使用以下代碼處理表單的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
,表單將立即關閉,您可能看不到警報。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.