首页 > 解决方案 > Windows 更新 KB5003637 似乎破坏了 WebBrowser 控制,有人知道为什么吗?

问题描述

KB5003637的最新 Windows 10 更新似乎导致我们使用 WebBrowser 控件失败。我们的应用程序使用 C++ 对话框,该对话框承载基于 IWebBrowser2 接口并由 COM 类 8856f961-340a-11d0-a96b-00c04fd705a2 实现的 Web 浏览器控件。该控件与托管在 localhost 端口上的定制内部“Web 服务器”交互。Web 浏览器正在使用一堆 css 和 javascript 呈现动态 HTML。这是一个已经可靠运行多年的遗留应用程序。我们拥有 Windows 10 版本 2004、20H2 和 21H1 的用户正在安装 KB5003637,当他们这样做时,Web 浏览器不会像以前那样呈现内容。查看一些跟踪,我可以看到 Web 浏览器正在请求页面的 HTML,这似乎是按应有的方式传递的。那时通常发生的情况是 Web 浏览器控件请求使页面处于活动状态所需的 css 和 javascript 文件。取而代之的是什么。KB5003637 更新相当大,但确实包含对中描述的一些脚本漏洞的修复CVE-2021-31959非常重要。到目前为止,我没有发现任何东西表明它是如何解决的,它对 WebBrowser 控件的影响,也没有可能有什么解决方法。任何帮助,将不胜感激。

标签: c++webbrowser-controlwindows-updateiwebbrowser2

解决方案


事实证明,我描述的 Windows 更新确实改变了 WebBrowser 控件的行为。我们定制的 Web 服务器不包括用于响应 WebBrowser 请求的内容类型标头。在过去十年或更长时间中,控件成功地能够确定内容是什么,或者在重要的情况下它默认为正确的内容类型。更新后,WebBrowser 默认为初始 HTML 有效负载的内容类型为“文本”。结果,它没有尝试将有效负载解释为 HTML,因此不需要进一步的操作(例如请求 css 和 js 文件)。

当我更改代码以包含初始有效负载的内容类型标头“text/html”时,应用程序开始工作。内容类型标头现在包含在所有回复中。


推荐阅读