c# - 使用 WPF/C# 嵌入 Chromium 而不是 IE WebBrowser 控件的选项

标签 c# wpf google-chrome webbrowser-control chromium-embedded

更新 2020 年,我有 linked my article我比较了在基本 Windows 桌面应用程序中托管 HTML WebView 的不同方法的内存占用:

  • MSEdge WebView2 WPF
  • Chromely/CefSharp
  • Electron v10
  • Legacy IE11 WebBrowser WPF .

  • 基于 Internet Explorer 的 WPF WebBrowser 控件存在一些问题 keyboard and focus issuesmemory leak issues .作为这些问题的替代解决方案,我们正在考虑在基于 HTML 编辑的 WPF/C# 项目中托管 Chromium 而不是 WebBrowser 控件的可用选项。类似问题已asked以前在这里。我已阅读答案并进行了自己的研究,但我希望从那些在生产质量项目中实际使用以下任何选项的人那里获得更多反馈 :
    AwesomiumAwesomium.NET
    它看起来很合适,但我不喜欢这个项目不是开源的,并且不容易获得完整的源代码。此外,这对我们的项目来说可能是一种矫枉过正,因为离屏渲染并不是我们真正依赖的东西。
    Chromium Embedded Framework (CEF).NET bindings for CEF
    这可能是目前可用的最佳选择。该项目似乎很活跃,目前与 Chrome v27 同步。 CEF3 使用 Chrome 多进程架构。看起来 Adob​​e 也在给它 some endorsement .
    Google's Chrome Frame
    虽然它的最初目的是作为 IE 和 Firefox 的 HTML5 插件,但它实际上也可以作为独立的 ActiveX 控件工作,所以我可以将它包装起来以与 WPF 一起使用。它暴露了一个 sufficient API用于与内部网页 ( onmessage, addEventListener/removeEventListener, postMessage ) 进行交互。
    我知道谷歌要 discontinue Chrome Frame,但我认为源代码将保留在 Chromium 存储库中。使用最新的 Chromium 代码更新它应该不难,我们将完全控制它。
    WebKit .NET wrapper
    不完全基于 Chromium 并且不使用 V8 引擎,所以它不是一个真正的选择。
    还有其他我可能忽略的选项吗?
    如果有人分享她/他对现实生活中的生产质量 W​​PF 项目的上述任何选项的经验,我将不胜感激。您有任何集成、许可或部署方面的影响吗?谢谢你。
    [编辑]
    还要感谢artlung通过提供慷慨的赏金提议来插入这个问题。

    最佳答案

    您已经列出了最著名的嵌入 Chromium 的解决方案(CEF、Chrome Frame、Awesomium)。没有更多重要的项目了。

    还有Berkelium项目(参见 Berkelium SharpBerkelium Managed ),但它嵌入了旧版本的 Chromium。

    CEF是您最好的选择 - 它是完全开源的并且经常更新。这是允许您嵌入最新版本的 Chromium 的唯一选项。现在 Per Lundberg 正在积极致力于将 CEF 3 移植到 CefSharp ,这是 future 最好的选择。还有Xilium.CefGlue ,但是这个为 CEF 提供了一个低级 API,它绑定(bind)到 CEF 的 C API。另一方面,CefSharp 绑定(bind)到 CEF 的 C++ API。

    Adobe 不是唯一使用 CEF 的主要参与者,请在 CEF wikipedia page 上查看其他使用 CEF 的著名应用程序。 .

    更新中 Chrome Frame毫无意义,因为项目已经retired .

    关于c# - 使用 WPF/C# 嵌入 Chromium 而不是 IE WebBrowser 控件的选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18119125/

    相关文章:

    java - Chrome 在与 Java SSL 服务器握手时关闭连接

    html - 自动完成关闭还是假?

    c# - 将点的 ArrayList 转换为字节数组以存储在 SQL 数据库中

    c# - 如何在asp.net中使用C#将jquery flot动态生成的图表导出到Excel中?

    c# - 如何添加动态控件而不是静态控件?

    c# - 转换器中的 WPF MultiBinding 失败 ==> DependencyProperty.UnsetValue

    c# - Microsoft Surface 中的全局未捕获异常处理程序?

    c# - Linq 到实体 : adding a where condition to a child relationship

    c# - 如何卡住所有可卡住的 WPF 对象?

    css - Chrome 以 0 的净旋转模糊文本,但我无法将其复制到环境之外