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