簡體   English   中英

如何確保在 CefSharp 中執行 ExecuteScriptAsync

[英]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 ,腳本將異步執行,並且該方法返回一個封裝腳本響應的任務。

例子

  1. 創建 Windows Forms 應用程序。

  2. 使用配置管理器或從調試工具欄將配置設置為 x64 或 x86 在此處輸入圖像描述 .

  3. 安裝CefSharp.WinForms NuGet package。

  4. 使用以下代碼處理表單的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;
  5. 運行應用程序,您將看到顯示警報后表單將關閉,但是如果您使用ExecuteScriptAsync ,表單將立即關閉,您可能看不到警報。

暫無
暫無

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

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