0

I found error while using LoadPageAsync Method. All code to reproduce is below.

1) Wait while new ChromiumWebBrowser("https://www.google.com/") page loaded.

2) then press button1. Result: canExecuteJs will be false while canExecuteJs1 will be true.

In other hand if don't wait for new ChromiumWebBrowser("https://www.google.com/") page to be loaded, and in moment button appear on screen click it, both variables will be true.

public ChromiumWebBrowser chromeBrowser;

public Form1()
{
    InitializeComponent();

    Cef.EnableHighDPISupport();
    Cef.Initialize(settings);

    chromeBrowser = new ChromiumWebBrowser("https://www.google.com/");

    Controls.Add(chromeBrowser);
    chromeBrowser.Dock = DockStyle.Fill;
}

public Task LoadPageAsync(IWebBrowser browser, string address = null)
{
    var tcs = new TaskCompletionSource<bool>(TaskCreationOptions.RunContinuationsAsynchronously);
    EventHandler<LoadingStateChangedEventArgs> handler = null;
    handler = (sender, args) =>
    {
        if (!args.IsLoading)
        {
            browser.LoadingStateChanged -= handler;
            tcs.TrySetResult(true);
        }
    };

    browser.LoadingStateChanged += handler;
    if (!string.IsNullOrEmpty(address))
        browser.Load(address);
    return tcs.Task;
}

private async void button1_Click(object sender, EventArgs e)
{
   await LoadPageAsync(chromeBrowser, "https://stackoverflow.com/questions/59862329/wordpress-submit-form-into-new-tab-and-continue-processing");
   var canExecuteJs = chromeBrowser.CanExecuteJavascriptInMainFrame; //FALSE
   await LoadPageAsync(chromeBrowser, "https://stackoverflow.com/questions/59861819/getting-2-values-from-array-of-objects");
   var canExecuteJs1 = chromeBrowser.CanExecuteJavascriptInMainFrame; //TRUE
}
ovasylenko
  • 2,635
  • 4
  • 17
  • 29

0 Answers0