我考虑将一个项目从cef (CefSharp) 迁移到 WebView2 WPF。我的初步测试显示,WebView2 API 具有我需要的接口,可以完成此移植。我担心可能会错过某些阻止我转换到 WebView2 的东西,而且我只能在这个转换的后期发现这一点。如果有人已经经历了这个过程,请分享是否需要注意可能成为这个迁移的障碍物的任何事情。在 WebView2 中是否缺少重要的 cef API?
我考虑将一个项目从cef (CefSharp) 迁移到 WebView2 WPF。我的初步测试显示,WebView2 API 具有我需要的接口,可以完成此移植。我担心可能会错过某些阻止我转换到 WebView2 的东西,而且我只能在这个转换的后期发现这一点。如果有人已经经历了这个过程,请分享是否需要注意可能成为这个迁移的障碍物的任何事情。在 WebView2 中是否缺少重要的 cef API?
这个问题在WebView2的Github上有部分回答了你的问题。我想补充一下。
总结:
这个答案基于我的个人经验,不是详尽的比较。
Chromium进程模型有一个主进程和许多辅助进程。当然,这只是一个简化,但它足够了。
CefSharp和WebView2都遵循这个进程模型,但有一个非常重要的区别。CefSharp在应用程序的进程中启动Chromium,而WebView2将其作为单独的进程启动。
在进程内模型是所有基于CEF的浏览器都通用的。优点:浏览器启动更快。缺点:
进程外模型在专有浏览器中很受欢迎。不仅WebView2以这种方式工作,还有DotNetBrowser和EO.WebBrowser。优点:
WebView2评分。
嵌入式Web内容的渲染有两种方法。一种是从实际的Chromium窗口中摆脱炫耀的东西并将其嵌入到应用程序中。我们称之为“窗口化”或“重量级”模式。另一种方法是在内存中呈现Web内容并在任意表面上绘制它。这被称为“离屏渲染”。
WebView2仅支持窗口化渲染。此模式有两个显着的缺点:它需要一个窗口才能运行,并且浏览器始终保持在顶部(也称为airspace issue)。
CefSharp还具有离屏渲染功能。它允许应用程序在控制台中运行,将Web内容与其他控件叠加,将Web内容渲染在Unity3D中等。
CefSharp评分。
SendMouse*
和SendKey*
方法。CefSharp不支持沙箱,而且似乎永远不会支持(#697)。
WebView2的得分。
CefSharp
和WebView2
都需要在计算机上安装/复制一个专门的版本的Chromium
。
固定版本:一个固定版本的Chromium
与您的应用程序捆绑在一起。您可以控制哪个版本。
常青:在某些操作系统上,Chromium
会被预先安装,然后通过Windows更新自动更新。目前对运行时是否更新有限制/无控制权。
CefSharp | WebView2 | |
---|---|---|
固定 | [x] | [x] |
常青 | [x] |
CefSharp
提供两种WPF
实现。第一种CefSharp.Wpf将每个帧呈现为位图,这允许进行本地WPF
体验。您可以应用变换、在顶部覆盖元素等。没有空域问题。有一些缺点,主要是性能较低(有一些事情可以做来挤出一些额外的帧)。
第二种是CefSharp.Wpf.HwndHost,它是基于HwndHost的实现,就像在WPF
中嵌入WinForms
版本,并支持绑定,您可以获得更好的性能,没有变换,不能在顶部叠加。空域问题适用。
WebView2
目前仅提供 HwndHost
实现,存在空域问题。有传言提供更本机 WPF 实现。