起因: 想通过 WinFrom 的 WebBrowser 控件查看用 PowerBI 发布到 Web 的数据图表

尝试了两个失败方案后在 NuGet 上以 WebBrowser 为关键词搜了一圈,发现了 CefSharp.WinForm。

优势

要谈 CefSharp.WinForm 的优势,就要看看下面两个失败案例。

WebBrowser

一开始准备直接使用 WinForm 自带的 WebBrowser 控件,结果上来就打脸——无法运行js 脚本。
CefSharp.WinForm 现代浏览器窗体 - 图1
又参考 SOF 的好些答案折腾了一下 WebBrowser,最终也只是实现了不报错,页面依然无法正常显式。

DotNetBrowser

从上面那个 SOF 一眼就看到了一个叫 DotNetBrowser 的包。没有细看,按照官网给的 Quick Start 就开始用,结果程序运行时就报错提醒我缺少 License。再回官网一看,有点小贵。

简介

CefSharp 允许你将 Chromium 嵌入 .NET 程序中。

CefSharp lets you embed Chromium in .NETapps. It is a lightweight .NET wrapper aroundthe Chromium Embedded Framework (CEF) by Marshall A. Greenblatt. About 30% ofthe bindings are written in C++/CLI with the majority of code here is C#. Itcan be used from C# or VB, or any other CLR language. CefSharp provides bothWPF and WinForms web browser control implementations.

相关资源:

  • GitHub
  • 官网
  • Wiki

    使用

    上手

    这个包用户很多(竟然还有中文帮助文档),但第一次配置非常复杂,折腾了很久,最终参考详细教程一步一步配置成功。

PS:最坑爹的是教程中间提到针对新老版本有 A、B 两种不同的配置方法,结果看了评论才知道 A、B 都得配置。
CefSharp.WinForm 现代浏览器窗体 - 图2

最终效果:
CefSharp.WinForm 现代浏览器窗体 - 图3

CefSharp FAQ

官方:使用 CefSharp 时的常见问题

Q:Cef.Shutdown() 执行后,再调用 Cef.Initialize 会导致程序崩溃。
A:Cef.Initialize 和 Cef.Shutdown 在整个应用程序生命周期内都只能执行一次。能够反复创建与 Dispose 的是ChromiumWebBrowser 对象。