c++ - 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 控件的影响,也没有可能有什么解决方法。任何帮助,将不胜感激。
解决方案
事实证明,我描述的 Windows 更新确实改变了 WebBrowser 控件的行为。我们定制的 Web 服务器不包括用于响应 WebBrowser 请求的内容类型标头。在过去十年或更长时间中,控件成功地能够确定内容是什么,或者在重要的情况下它默认为正确的内容类型。更新后,WebBrowser 默认为初始 HTML 有效负载的内容类型为“文本”。结果,它没有尝试将有效负载解释为 HTML,因此不需要进一步的操作(例如请求 css 和 js 文件)。
当我更改代码以包含初始有效负载的内容类型标头“text/html”时,应用程序开始工作。内容类型标头现在包含在所有回复中。
推荐阅读
- awk - awk 从另一个数组创建一个新的唯一值数组
- html - 移除按钮的背景和边框后,在 Firefox 中使用键盘导航到它时不会显示焦点。(可访问性)
- javascript - 我想在单元格范围内搜索文本并将值返回到单元格的左侧(Google App Script)
- c# - 在 UI 类中处理后端事件
- azure - 如何使用 SAS 密钥向 Azure 表存储发出 Invoke-RestMethod GET 和 PUT 请求
- python - Python Pandas 如何查找两列之间的 3 个组合的计数
- tsql - 两个日期之间年份和月份的 T-SQL 列表
- python - 将 pandas 数据框从长改成宽时的自定义变量名称
- service - 工兵和服务人员
- r - par(mfrow = c(x, y)) 在 Rmd 内联输出中不起作用