#c #webbrowser-control #windows-update #iwebbrowser2
Вопрос:
Недавнее обновление Windows 10 для KB5003637, похоже, привело к сбою в использовании элемента управления WebBrowser. Наши приложения используют диалоговое окно C , в котором размещается элемент управления веб-браузером, основанный на интерфейсе IWebBrowser2 и реализованный классом COM 8856f961-340a-11d0-a96b-00c04fd705a2. Элемент управления взаимодействует с индивидуальным внутренним «веб-сервером», размещенным на локальном хост-порту. Веб — браузер отображает динамический HTML с помощью набора css и javascript. Это устаревшее приложение, которое надежно работает уже много лет. Наши пользователи с Windows 10 версий 2004, 20H2 и 21H1 устанавливают KB5003637, и когда они это делают, веб-браузер не отображает содержимое, которое он делал раньше. Посмотрев на некоторые следы, я вижу, что веб-браузер запрашивает HTML-код страницы, который, похоже, доставляется так, как должен. Что обычно происходит в это время, так это то, что элемент управления веб-браузером запрашивает файлы css и javascript, необходимые для активации страницы. То, что происходит вместо этого, — ничто. Обновление KB5003637 довольно большое, но содержит исправления для некоторых уязвимостей сценариев, описанных вCVE-2021-31959, которые очень точны. Ничто из того, что я нашел до сих пор, не указывает на то, как это было исправлено, влияние, которое это оказывает на управление веб-браузером, и какие могут быть обходные пути. Любая помощь будет признательна.
Ответ №1:
Оказывается, описанное мной обновление Windows изменило поведение элемента управления WebBrowser. Наш заказной веб-сервер не включал заголовки типов контента для ответов на запрос веб-браузера. В течение последнего десятилетия или более контроль успешно мог определить, что это за контент, ИЛИ в тех случаях, когда это имело значение, по умолчанию использовался правильный тип контента. После обновления веб-браузер по умолчанию использовал тип содержимого «текст» для начальной полезной нагрузки HTML. В результате он не пытался интерпретировать полезную нагрузку как HTML, и поэтому никаких дальнейших действий не требовалось (например, запрашивать файлы css и js).
Когда я изменил код, чтобы включить заголовок типа содержимого «текст/html» для начальной полезной нагрузки, приложение начало работать. Заголовки типов контента теперь включены во все ответы.