【发布时间】:2022-08-15 03:28:36
【问题描述】:
帮我为当前版本的 CefSharp v103 重写旧的工作代码 .Net 4.72 CefSharp v57
我需要从 JS 结果 \'hello\' 中获得异步响应。
我尝试使用 JavascriptObjectRepository 而不是 RegisterJsObject 但它对我没有用
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);
-
CefSharp 现在有一个与您的代码等效的名为 CefSharp.PostMessage 的内置代码,请参阅github.com/cefsharp/CefSharp/issues/2775#issuecomment-498454221
标签: c# cefsharp cefsharp.offscreen