WebView2 (TEdgeBrowser) не работает в фоновом режиме (если не отображается на экране) - отображается только как серый прямоугольник
Я подтвердил эту проблему, используя стандартную демонстрацию Delphi 10.4 EdgeBrowser VCL с той лишь разницей, что я поместил панель с компонентом edgebrowser на таблицу TPageControl Tabsheet.
Теперь, если мое приложение запускается с Edgebrowser, который не отображается непосредственно на экране (потому что активна другая таблица), Edgebrowser никогда не будет полностью рисовать на экране позже. Он всегда будет представлен только как серый прямоугольник и не сможет от него оправиться, пока я не позвоню
EdgeBrowser.CloseWebView; EdgeBrowser.CreateWebView;
пока компонент Edgebrowser виден на экране (он должен быть видим, иначе опять ничего не произойдет).
Это означает, что я не могу использовать команды «Edgebrowser.Navigate» или что-либо еще, пока Edgebrowser находится в фоновом режиме, на другой таблице вкладок или пока форма скрыта, иначе она снова «станет серой».
Интересно: это ошибка или мне здесь не хватает чего-то серьезного? Я попытался вызвать Edgebrowser.Refresh и Edgebrowser.Repaint, но это не помогло. Когда он станет серым, восстановить его поможет только закрытие и повторное создание WebView.
Мне кажется очевидным, что это какая-то проблема с холстом, но я понятия не имею, что делать дальше. Надеюсь, вы сможете помочь или хотя бы подтвердить это странное поведение.
Системные характеристики: Delphi 10.4 Update 1 в Windows 10 Pro 20H2 в VMware Workstation 16 microsoft.web.webview2.0.9.579 из nuget и последняя версия Edge Runtime отсюда (устанавливается с установщиком начальной загрузки)
Чтобы быстро воссоздать тот же сценарий в вашей системе: откройте «C: \ Users \ Public \ Documents \ Embarcadero \ Studio \ 21.0 \ Samples \ Object Pascal \ VCL \ WebBrowser \ Edge \ EdgeBrowser.dproj»; вырезать pnlWebViewHost в буфер обмена (это панель, содержащая компонент Edgebrowser); вставить TPageControl; добавьте 2 таблицы и вставьте pnlWebViewHost в один из них. Переключитесь на другую пустую таблицу вкладок и запустите приложение. Во время выполнения щелкните вкладку с браузером, которая теперь должна отображаться только в виде серого прямоугольника.
1 ответ
У меня есть вкладка и браузер на всех страницах. У меня есть веб-страница во всех браузерах. Если я нажму на вкладку, я смогу переключаться между браузерами. Если я уничтожу один браузер, все станет серым. Если я затем вызову ReinitializeWebView в каждом браузере, он снова заработает. Я добавляю на вкладку кнопку ReinitializeWebView, поэтому пробую только тогда, когда браузер виден. TWebbrowser был более автономным.
Если я загружаю файл в браузере, например. XML, если я затем закрою этот браузер, это не повлияет на другие. Но он будет серым, если я закрою какой-нибудь другой.