Search code examples
c#cefsharpcefsharp.offscreen

Callback result JS in CefSharp Offscreen


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);

Solution

  • 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);