16 марта 2021

Встраиваем Microsoft Edge. Дополнение №2 "Новшества Delphi 10.4.2"

    Я уже два раза писал про возможность встраивания в приложение на RAD Studio 10.4 браузера Microsoft Edge на основе Chromium. Одной из проблем с которой столкнулись программисты в Delphi 10.4.1 является несовместимость TEdgeBrowser с WebView2 старше, чем выпущенная 8 месяцев тому назад версия 0.9.579 (багрепорт от клиентов RSP-31427). Причиной этого является то, что TEdgeBrowser в Delphi 10.4-10.4.1 после своего создания выполняет инициализацию элемента управления WebView2 в фоновом потоке, а разработчики из Microsoft отключили эту возможность.
    Разработчики Delphi 10.4.2 решили эту проблему. Теперь инициализация WebView2 происходит в основном потоке пользовательского интерфейса при первом вызове метода Navigate. 25 января в GetIt стал доступен EdgeView2 SDK 1.0.664.37.
EdgeView2 SDK 1.0.664.37 in GetIt
Злая шутка в том, что за несколько часов до того, как программисты Embarcadero собрали архив с EdgeView2 v1.0.664.37, программисты Microsoft выложили версию EdgeView2 v1.0.705.50. Издеваются? Но могу успокоить. TEdgeBrowser работает и с версией 1.0.705.50, и с сегодняшней версией 1.0.824-prerelease, и со старыми версиями.
    В Delphi 10.4.2 контролу TEdgeBrowser добавили новые свойства. Мне показалось полезным свойство UserDataFolder. Оно позволяет разработчику указать папку для хранения кэша EdgeView2. По умолчанию он хранится в папке {your_exe_name}.WebView2. Например, если моя тестовая программа называется "Edge.exe", то при открытии страницы в TEdgeBrowser в папке программы создается папка для кэша "Edge.exe.WebView2\EBWebView". Теперь, если в свойстве UserDataFolder задать папку
procedure TForm1.FormCreate(Sender: TObject);
begin
  EdgeBrowser.UserDataFolder := 'c:\temp';
end;
то папка "EBWebView" будет создана в ней. Второе новое свойство – BrowserExecutableFolder. Оно позволяет указать расположение msedgewebview2.exe. Оба новых свойства являются параметрами для функции CreateCoreWebView2EnvironmentWithOptions, которая экспортируется из SDK и используется при инициализации контрола WebView. Поэтому после изменения свойства UserDataFolder или BrowserExecutableFolder необходимо повторно инициализировать WebView2 вызовом метода ReinitializeWebView или ReinitializeWebViewWithNewBrowser.

Комментариев нет:

Отправка комментария