0

Help me rewrite the old working code .Net 4.72 CefSharp v57 for the current version of CefSharp v103

I need to get an asynchronous response from JS result 'hello'.

I tried using JavascriptObjectRepository instead of RegisterJsObject but it didn't work out for me

 public class JavascriptCallback
 {
    // событие, которое срабатывает, когда мы получаем результат из Ajax-вызова
    public event Action OnResult;

    // возвращает объект результата вызова Ajax
    public object Result { get; private set; }

    // метод, который будет вызываться из JavaScript
    public void SetResult(object result)
    {
        Result = result;

        OnResult?.Invoke();
    }

 }


        private ChromiumWebBrowser _browser;
        private readonly JavascriptCallback _javascriptCallback = new JavascriptCallback();

        _browser.RegisterJsObject(
            nameof(JavascriptCallback),
            _javascriptCallback,
            new BindingOptions
            {

                CamelCaseJavascriptNames = false
            }
        );


        Action onResultCallback = null;
        onResultCallback = () =>
        {
            _javascriptCallback.OnResult -= onResultCallback;
             // return callback result 'hello'
             Console.WriteLine(_javascriptCallback.Result.ToString());
        };
        _javascriptCallback.OnResult += onResultCallback;

        string script =
        @"
        $(document).ajaxSuccess((event, xhr, settings) => 
        {
               JavascriptCallback.SetResult('hello');
        });
        ";
        await _browser.EvaluateScriptAsync(script);
Elgin Maksim
  • 31
  • 1
  • 10
  • CefSharp now has a built in equivalent of your code called CefSharp.PostMessage see https://github.com/cefsharp/CefSharp/issues/2775#issuecomment-498454221 – amaitland Aug 07 '22 at 20:23

1 Answers1

1

This event is called on a CEF, thanks amaitland

    private void OnBrowserJavascriptMessageReceived(object sender, JavascriptMessageReceivedEventArgs e)
    {
        var message = (string)e.Message;
    }

    chromeBrowser.JavascriptMessageReceived += OnBrowserJavascriptMessageReceived;
    string script =
    @"
    $(document).ajaxSuccess((event, xhr, settings) => 
    {
           CefSharp.PostMessage('Hello');
    });
    ";
    await chromeBrowser.EvaluateScriptAsync(script);
Elgin Maksim
  • 31
  • 1
  • 10