【问题标题】:What engine renders the WebBrowser Control?什么引擎呈现 WebBrowser 控件?
【发布时间】:2016-07-06 17:06:36
【问题描述】:

我目前在下面创建的 VB.NET 项目中有一个 WebBrowser 控件:

Private Sub SomeSubToPrintHTMLViaWebBrowser()

   ' strDocument is the giant blob of HTML text that can be seen in the jsFiddle linked later in the question.

    Dim webBrowserHidden As New WebBrowser

    AddHandler webBrowserHidden.DocumentCompleted, New WebBrowserDocumentCompletedEventHandler(AddressOf PrintDocument)

    webBrowserHidden.DocumentText = strDocument

End Sub

但是,当我使用 WebBrowser 的 .Print.ShowPrintDialog 方法时,即使我在 IE、Edge、Chrome 或 Firefox 中将 HTML 编码加载为网页,它也可以正常工作完全没问题。该编码也被 W3C 在线验证器验证为“正确”。

那么我想知道的是,WebBrowser使用什么引擎来渲染页面?

这是我尝试运行的 HTML/CSS 编码

https://jsfiddle.net/et1t2kh5/

【问题讨论】:

  • 它使用支持 IE 的 Trident 引擎。 WebBrowser 控件是 InternetExplorer COM 控件的 .NET 宿主。
  • 我假设没有简单的方法让我通过另一个浏览器呈现.Print() 方法?说 Chrome 或其他?在这一点上,我可能会说把<DIV> 表搞砸,改用普通的<TABLE>
  • Paul,您总是可以启动一个新的 Chrome 实例并将 URL 传递给它。除此之外,没有那么多。

标签: html vb.net webbrowser-control


【解决方案1】:

这可能是因为 WebBrowser 控件正在模拟旧版本的 IE。 不幸的是,没有简单的解决方法,解决方法需要您修改注册表。

使用注册表编辑器 (regedit.exe) 导航到 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION

添加一个新的 DWORD 条目,其中名称将是应用程序的可执行文件的名称,然后将值设置为 2af8(十六进制)或 11000(十进制)。

这将强制 WebBrowser 控件使用 IE11 的渲染引擎。

更多信息请参考以下链接:Internet Feature Controls (B..C)

【讨论】:

  • 事后看来,这似乎并不多,因为我可以编写一个指令来修改注册表。写的时候只需要.exe名称还是完整路径加上exe名称?
  • 只是EXE。例如,如果您的应用程序名称是“MyApp”,那么您只需要为“MyApp.exe”添加一个条目。如果您使用的是 VisualStudio,请记住还要添加 VS 为调试目的创建的 EXE 的虚拟主机版本,例如:“MyApp.vshost.exe”
  • 很明显,当我部署应用程序时,它只是 .exe。明白了。
  • @PaulWilliams,您不必使用HKLM。检查this
  • 是的,您可以使用 HKLU,它将更改应用到当前用户,但 HKLM 确保功能更改将在任何帐户下工作。
猜你喜欢
  • 2012-10-06
  • 1970-01-01
  • 2012-04-16
  • 2023-03-10
  • 2011-02-19
  • 1970-01-01
  • 1970-01-01
  • 2011-04-25
  • 1970-01-01
相关资源
最近更新 更多