nos*_*tio 155 c# wpf google-chrome webbrowser-control chromium-embedded
基于Internet Explorer的WPF WebBrowser控件会遇到一些键盘和焦点问题以及内存泄漏问题.作为这些问题的替代解决方案,我们正在考虑在基于HTML编辑的WPF/C#项目中托管Chromium而不是WebBrowser控件的可用选项.此前已经提出了类似的问题.我已经阅读了答案并完成了自己的研究,但我希望从生产质量项目中实际使用以下任何选项的人那里获得更多反馈:
它看起来非常合适,但我不喜欢这个项目不是开源的事实,并且不能轻易获得完整的资源.此外,它可能对我们的项目来说太过分了,因为屏幕外渲染不是我们真正依赖的东西.
用于CEF的Chromium Embedded Framework(CEF)和.NET绑定
这可能是目前可用的最佳选择.该项目似乎活跃且活跃,目前与Chrome v27同步.CEF3使用Chrome多进程架构.看起来Adobe似乎正在给它一些支持.
虽然它的最初目的是成为IE和Firefox的HTML5插件,但它实际上也可以作为独立的ActiveX控件使用,所以我可以将它包装起来用于WPF.它公开了足够的API以与内部网页(onmessage, addEventListener/removeEventListener, postMessage
)进行交互.我知道谷歌将停止使用 Chrome Frame,但我认为这些来源将保留在Chromium存储库中.使用最新的Chromium代码更新它并不困难,我们可以完全控制它.
不完全是基于Chromium而且不使用V8引擎,所以它不是一个真正的选择.
还有其他我可能忽略的选择吗?
如果有人与上述任何选项分享她/他在实际生产质量的WPF项目中的经验,我将不胜感激.您是否有任何集成,许可或部署影响?谢谢.
[编辑] 我还要感谢artlung通过提供慷慨的赏金提议来提升这个问题.
Cza*_*zak 120
您已经列出了嵌入Chromium(CEF,Chrome Frame,Awesomium)最着名的解决方案.没有更重要的项目了.
仍然有Berkelium项目(参见Berkelium Sharp和Berkelium 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的,因为该项目已是毫无意义的退役.
Art*_*tem 11
前段时间我们遇到了完全相同的挑战.我们想要使用基于WPF的CEF3开源库并支持.NET 3.5.
首先,CEF的作者自己列出了不同语言的结合在这里.
其次,我们继续开源.NET CEF3绑定,称为Xilium.CefGlue,并取得了很好的成功.如果某些内容无法按照您的预期运行,作者通常会对内置bitbucket跟踪器中打开的问题做出快速响应
到目前为止,它一直很好.作者更新他的库以支持最新的CEF3版本和常规基础上的错误修复.
小智 9
这是另一个:
http://www.essentialobjects.com/Products/WebBrowser/Default.aspx
这个也是基于最新的Chrome引擎,但它比CEF更容易使用.它是一个单独的.NET DLL,您可以简单地引用和使用它.
看看我所属的团队开发的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包使用.
我使用过Awesomium.NET.虽然我不喜欢它不是开源的事实,而且它也使用了一个非常古老的Webkit渲染引擎这一事实,但它真的很容易使用.这是我能给予它的唯一认可.
归档时间: |
|
查看次数: |
121722 次 |
最近记录: |