#wpf #cefsharp #webview2
Вопрос:
С помощью WebVeiw2 вы можете отправить сообщение веб-приложению, запущенному в нем, с помощью WebView2Ctrl?.CoreWebView2?.PostWebMessageAsJson(сообщение). Есть ли способ сделать это в CefSharp
Комментарии:
1. Есть несколько способов общения со своей стороны . Сетевое приложение для браузера, просто выполняющее JavaScript, используя обратный вызов ijavascript. Не могли бы вы рассказать немного подробнее о своем варианте использования? Недд, чтобы узнать больше, прежде чем я смогу предложить, какой подход, скорее всего, лучше всего соответствует вашим требованиям.
2. В качестве общей справки github.com/cefsharp/CefSharp/wiki/…
Ответ №1:
- Создайте класс (я использовал JavascriptCallbackMessenger) для установки и запуска обратных вызовов.
общедоступный класс JavascriptCallbackMessenger { частный IJavascriptCallback _ обратный вызов;
public void SetCallBack(IJavascriptCallback callback) { _callback = callback; } public void RunCallback(string message) { if (_callback != null amp;amp; _callback.CanExecute) { _callback.ExecuteAsync(message); } }
}
- Создайте экземпляр JavascriptCallbackMessenger и зарегистрируйте его в элементе управления CefSharp
CefSharpCtrl.JavascriptObjectRepository.Register(имя JavascriptCallbackMessengerName, _messenger, true, BindingOptions.Привязка по умолчанию);
- Установите обратный вызов в Javascript следующим образом (я не разработчик JS, но это было мое решение).
(асинхронная функция() { const CefSharp = (окно как любое).CefSharp;
await cefSharp.BindObjectAsync(JavascriptCallbackMessengerName); window.javascriptCallbackMessenger.setCallBack(function(message: string) { console.log("messageHandler: " message); })
})();
Я использовал typescript, поэтому мне пришлось расширить окно с помощью недавно созданной переменной.
declare global {
interface Window { javascriptCallbackMessenger: any; }
}
Извините, но форматирование, кажется, немного «не в порядке»!
Комментарии:
1. Вы можете использовать CefSharp.postMessage в JavaScript и избежать регистрации класса, если все, что вы делаете, — это передача обратного вызова. github.com/cefsharp/CefSharp/wiki/…
2. Также EvaluateScriptAsync может возвращать обратный вызов ijavascript, поэтому вы можете выполнить некоторые JavaScript со своего . Сетевое приложение, чтобы получить ссылку на функцию JavaScript. github.com/cefsharp/CefSharp/wiki/… в последнем примере захватывается щелчок кнопки, то же самое можно использовать для основной функции.