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

nos*_*tio 155 c# wpf google-chrome webbrowser-control chromium-embedded

基于Internet Explorer的WPF WebBrowser控件会遇到一些键盘和焦点问题以及内存泄漏问题.作为这些问题的替代解决方案,我们正在考虑在基于HTML编辑的WPF/C#项目中托管Chromium而不是WebBrowser控件的可用选项.此前已经提出了类似的问题.我已经阅读了答案并完成了自己的研究,但我希望从生产质量项目中实际使用以下任何选项的人那里获得更多反馈:

AwesomiumAwesomium.NET

它看起来非常合适,但我不喜欢这个项目不是开源的事实,并且不能轻易获得完整的资源.此外,它可能对我们的项目来说太过分了,因为屏幕外渲染不是我们真正依赖的东西.

用于CEF的Chromium Embedded Framework(CEF).NET绑定

这可能是目前可用的最佳选择.该项目似乎活跃且活跃,目前与Chrome v27同步.CEF3使用Chrome多进程架构.看起来Adobe似乎正在给它一些支持.

谷歌的Chrome Frame

虽然它的最初目的是成为IE和Firefox的HTML5插件,但它实际上也可以作为独立的ActiveX控件使用,所以我可以将它包装起来用于WPF.它公开了足够的API以与内部网页(onmessage, addEventListener/removeEventListener, postMessage)进行交互.我知道谷歌将停止使用 Chrome Frame,但我认为这些来源将保留在Chromium存储库中.使用最新的Chromium代码更新它并不困难,我们可以完全控制它.

WebKit .NET包装器

不完全是基于Chromium而且不使用V8引擎,所以它不是一个真正的选择.

还有其他我可能忽略的选择吗?

如果有人与上述任何选项分享她/他在实际生产质量的WPF项目中的经验,我将不胜感激.您是否有任何集成,许可或部署影响?谢谢.

[编辑] 我还要感谢artlung通过提供慷慨的赏金提议来提升这个问题.

Cza*_*zak 120

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

仍然有Berkelium项目(参见Berkelium SharpBerkelium Managed),但它是旧版的Chromium.

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

Adobe并不是唯一使用CEF的主要播放器,请参阅CEF维基百科页面上使用CEF的其他值得注意的应用程序.

更新Chrome Frame的,因为该项目已是毫无意义的退役.

  • 呵呵,很好的回答Czarek,谢谢你的功劳.:)(直到现在才看到这个) (4认同)
  • 当然,值得指出的是:任何开源项目中都可能存在"缺失"的情况.Xilium.CefGlue和CefSharp都不是该规则的任何例外.关于开源软件的好处是,您实际上可以花费(相当低的)时间来研究较小的问题,并获得包含的修复.我们不时地看到CefSharp并且它非常整洁. (4认同)
  • 只是更新,Chrome Frame已经退役. (2认同)
  • 如果我错了,请纠正我,但 CefSharp 不需要超过 50MB 的 DLL 吗?这导致了巨大的安装设置。libcef.dll 被列为主要依赖项,大小为 38MB (2认同)
  • @Krafty安装设置允许使用像7z这样的算法打包它,这导致大小从55 MB - >减少到17 MB.与谷歌浏览器相比,CefSharp的大小并不多,谷歌浏览器的解压缩为152 MB,设置为40 MB. (2认同)

Art*_*tem 11

前段时间我们遇到了完全相同的挑战.我们想要使用基于WPF的CEF3开源库并支持.NET 3.5.

首先,CEF的作者自己列出了不同语言的结合在这里.

其次,我们继续开源.NET CEF3绑定,称为Xilium.CefGlue,并取得了很好的成功.如果某些内容无法按照您的预期运行,作者通常会对内置bitbucket跟踪器中打开的问题做出快速响应

到目前为止,它一直很好.作者更新他的库以支持最新的CEF3版本和常规基础上的错误修复.

  • 这实际上是一个要点(来自"另一方",其中就是CefSharp) - 自几个月以来CefSharp只有4.0,因为有较新的VS工具集支持3.5的问题.(VS2010 +不支持使用C++/CLI的旧框架,这有点令人伤心,因为它迫使我们使用.NET 4或一个非常古老的Visual Studio版本......) (2认同)

小智 9

这是另一个:

http://www.essentialobjects.com/Products/WebBrowser/Default.aspx

这个也是基于最新的Chrome引擎,但它比CEF更容易使用.它是一个单独的.NET DLL,您可以简单地引用和使用它.

  • 该网站似乎缺少基本信息 - 它包含哪些Chrome版本? (3认同)
  • 哦,哦,不是免费的。不是免费的。这些人是怎么想的?:) (3认同)
  • 他们采用免费的开源项目并将其转变为付费许可模式.... (2认同)

Vla*_*mir 8

看看我所属的团队开发的DotNetBrowser库.它提供了基于Chromium的WPF和WinForms浏览器控件,它们很容易嵌入到.NET应用程序中.它支持所有现代Web标准,包括HTML5,CSS3和JavaScript.呈现的页面与Google Chrome中的内容完全相同.

该库继承了Chromium的多进程架构 - 每个Web页面都在一个单独的Chromium进程中呈现,即使在插件崩溃或网页上发生任何其他意外错误之后,应用程序仍将继续工作.

以下是DotNetBrowser提供的一些其他有用功能:可以监听加载事件,处理网络活动,配置代理,模拟用户操作,使用cookie,访问和修改DOM,监听DOM事件,从.NET调用JavaScript反之亦然,使用网络摄像头和麦克风的网页上,建立了基于的WebRTC通信,和更多.

有关更多详细信息,请查看API参考.

下面的代码片段演示了如何创建BrowserView,将其嵌入到Form中,以及如何加载URL:

using System.Windows.Forms;
using DotNetBrowser;
using DotNetBrowser.WinForms;

namespace WinForms.DotNetBrowser
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            BrowserView browserView = new WinFormsBrowserView();
            Controls.Add((Control) browserView);
            browserView.Browser.LoadURL("http://www.youtube.com");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

运行上面的示例后,您将获得以下输出:

在此输入图像描述

该图书馆是商业图书馆,但它可以免费用于开源和学术项目.商业许可证包括针对不同团队规模的支持包.也可以购买图书馆的源代码.

除了自己的页面外,该组件还可以作为NuGet包和Visual Studio Marketplace中的VSIX包使用.


Min*_*gar 5

我使用过Awesomium.NET.虽然我不喜欢它不是开源的事实,而且它也使用了一个非常古老的Webkit渲染引擎这一事实,但它真的很容易使用.这是我能给予它的唯一认可.

  • 我终于选择了CefSharp,结果令人惊叹.<100 ms初始化(即即时初始化),没有"错误".东西才行.正如它应该.此外,CefSharp不需要添加到GAC中,因此无需更改安装程序.只需复制您的文件即可.我提到过CEF/CefSharp比我测试的每个Mozilla/WebKit C#库都好吗?哦,天哪,不要使用IE浏览器.有用.是的,它确实如此,但它完全缺乏功能,而且性能非常差(速度). (5认同)
  • 您能否大致分享一下您对该项目的用户群有多大? (2认同)
  • 几个月来我一直在支持基于Awesomium的C#应用​​程序; 它可能适用于C++游戏,但在C#中,它们的浏览器控制是彻头彻尾的错误.复杂的部署(您需要他们奇怪的安装程序将内容添加到GAC中),错误的行为(有时它会启动黑屏,用户必须手动重启应用程序),以及它的低速(网页在加载时不会显示,它有点挂起,直到页面完全/半载,并且在慢机器上初始化需要5-10秒) (2认同)