【发布时间】:2021-12-12 04:19:42
【问题描述】:
我有代码(并且几十年来):
- 给定一些 HTML
string在内存中 - 将该文档交给 Internet Explorer 对象
- 并使 Internet Explorer(独立进程)可见
- 所有这些都不会在用户的计算机上乱扔临时文件
换句话说:
void SpawnIEWithSource(string szSourceHTML)
{
IWebBrowser ie = (IWebBrowser)CoCreateInstance(CLASS_InternetExplorer, null, CLSCTX_INPROC_SERVER | CLSCTX_LOCAL_SERVER,
UuidOf(IUnknown));
ie.Navigate2("about:blank");
ie.Document.Write(szSourceHtml);
ie.Document.Close;
ie.Visible = True;
}
- 优点:
-
缺点:
- 硬编码 Internet Explorer 的使用,而不是用户首选的浏览器
但是 IE 正在消失
Microsoft recently announced 表示 Internet Explorer(产品)将不再随 Windows 提供,但 Internet Explorer(编程 api)将继续工作:
正如今天宣布的那样,具有 IE 模式的 Microsoft Edge 将正式取代 Windows 10 上的 Internet Explorer 11 桌面应用程序。因此,Internet Explorer 11 桌面应用程序将在 2022 年 6 月 15 日停止支持并停用Windows 10 版本。
在本公告发布时超出范围(不受影响):
- Microsoft Edge 中的 Internet Explorer 模式
- Internet Explorer 平台 (MSHTML/Trident),包括 WebOC
- Internet Explorer 11 桌面应用程序在:
- Windows 8.1
- Windows 7 扩展安全更新 (ESU)
- Windows 10 Server SAC(所有版本)
- Windows 10 IoT 长期服务通道 (LTSC)(所有版本)
- Windows 10 Server LTSC(所有版本)
- Windows 10 客户端 LTSC(所有版本)
什么是 MSHTML (Trident) 引擎?这与 IE 模式有何关系?
MSHTML (Trident) 引擎是 Internet Explorer 11 的底层平台。这与 IE 模式使用的引擎相同,并将继续得到支持(换句话说,不受本公告的影响)。 WebOC 也将继续得到支持。 如果您有一个依赖 MSHTML 平台的自定义或第三方应用程序,您可以期待它继续工作。
(强调我的)
这意味着微软正在打破 23 年的向后兼容性 - 并将其替换为...什么都没有。
所以我需要找到一种方法来替换它。
- 生成默认浏览器
- 给它我要显示的 HTML
- 全部没有临时文件
阅读奖励
【问题讨论】:
-
写入 RAM 而不是文件系统是否可以接受?
-
@Spyre 可以接受;这基本上就是现在正在发生的事情。我考虑过创建一个 TCP 监听套接字来提供内容,但是一些公司机器阻止打开监听套接字。
-
你能举一个例子
szSourceHTML使用你现有的代码吗? -
@Spyre
<HTML><BODY>Hello, world!</BODY></HTML> -
@Spyre 以前使用 Internet Explorer 的优点是它是操作系统的保证部分——每个版本的 Windows 都有它。如果没有 IE,我什至不知道是否会安装旧版 Edge,甚至是新版 Edge——更不用说 Chrome、Firefox 或 Brave。
data:text/html架构很好,因为它可以在任何支持它的浏览器中启动。
标签: html windows browser automation