В современном мире разработки программного обеспечения, где безопасность и производительность играют ключевую роль, разработчики часто сталкиваются с необходимостью обновления используемых технологий. В частности, это касается компонентов для встраивания браузера в настольные приложения, написанные на Delphi. В данной статье мы рассмотрим, как использовать новый компонент TEdgeBrowser, представленный в Delphi 10.4, который базируется на Microsoft Edge и Chromium, для интеграции и вызова нативного кода из JavaScript.
Проблема
На данный момент в наших настольных приложениях используется компонент TWebBrowser для встраивания Internet Explorer. Для вызова кода на Delphi из JavaScript, выполняющегося на встроенной веб-странице, мы реализовали поддержку объекта window.external, как описано в этой статье.
Однако, в связи с рядом причин, нам необходимо перейти на использование современного браузера. Уже обновление до Delphi 10.4 позволяет нам использовать новый компонент TEdgeBrowser, который базируется на Chromium и Microsoft Edge. Вопрос заключается в том, возможно ли использовать window.external для TEdgeBrowser и как это сделать, или существует другой способ вызова нативного кода из JavaScript, выполняющегося на встроенной веб-странице.
Альтернативный ответ и комментарии
Использование TWebBrowser позволяет использовать режим эмуляции браузера для получения функциональности современного браузера, что может быть полезным в краткосрочной перспективе, учитывая, что новый компонент на основе Chromium Edge от Microsoft еще не был официально выпущен. Однако, учитывая, что наши приложения используются в критически важной инфраструктуре и что клиент из газовой промышленности требует перехода на Chromium по соображениям безопасности, а также сталкивается с проблемами сброса настроек эмуляции IE в реестре, мы ищем другое решение.
Компонент TEdgeBrowser и проект CEF4Delphi представляют интерес, но их реализация может оказаться сложной задачей. В качестве альтернативы было обнаружено, что TEdgeBrowser использует WebView2, с помощью которого можно зарегистрировать обработчик (handler) для приема вызовов JavaScript к window.chrome.webview.postMessage.
Подтвержденный ответ и примеры кода
После изучения документации, предоставленной в разделе "Getting started", было выяснено, что процесс настройки не так сложен, как может показаться на первый взгляд. Благодарность за помощь выражается TOndrej за предоставленный "Getting started" link, который помог разобраться в вопросе. Также было установлено, что решение работает с Microsoft Edge Beta (84.0.522.28), и нет необходимости использовать Canary, как описано в блоге Marco Cantu. Ожидается, что в скором времени решение будет работать и с официальной версией Microsoft Edge.
Вот примеры кода на Object Pascal (Delphi) и HTML, которые демонстрируют интеграцию и вызов нативного кода из JavaScript:
Delphi:
procedure TForm1.Button1Click(Sender: TObject);
begin
EdgeBrowser1.Navigate(ExtractFilePath(ParamStr(0)) + 'index.html');
end;
procedure TForm1.EdgeBrowser1WebMessageReceived(Sender: TCustomEdgeBrowser; Args: TWebMessageReceivedEventArgs);
var
Msg: PChar;
begin
Args.ArgsInterface.Get_webMessageAsJson(Msg);
MessageBox(Handle, Msg, PChar(EmptyStr), MB_OK);
end;
Переход на использование TEdgeBrowser в Delphi 10.4 открывает новые возможности для разработчиков, предоставляя современные технологии для встраивания браузера и интеграции с нативным кодом, что способствует повышению безопасности и производительности приложений.
Статья о переходе с использования старых компонентов для встраивания браузера в приложения на Delphi на новый компонент TEdgeBrowser, поддерживающий современные технологии и безопасность, и о том, как интегрировать и вызывать нативный код из Ja
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.