前言
已更新后续:WebView2 使用及现状
最近研究.net Core的时候,发现微软终于放弃IE内核,拥抱Chrome了,这也算是微软对开源的决心越来越大吧。作为桌面端程序开发人员,不管是使用Winform还是WPF,如果想在界面上加载HTMl代码,使用自带的WebBrowser会发现是灾难性的事件,WebBrowser万年不变的IE7内核让不管多绚丽多彩的HTMl暗然失色,于是开始寻找替代方案,而CefSharp就是不二之选,CefSharp使用的是CEF开源框架,CEF 是一个基于google chromiun的简单的框架。
CefSharp: https://github.com/cefsharp/CefSharp/.
CefSharp提供Winform、WPF、OffScreen的NuGet获取下载,使用也很简单,只需要简单的配置一下即可享受Chrome浏览器的体验,之前写过一个 CefSharp 使用心得.
一、WebView2是什么?
Microsoft Edge WebView2 控件使你能够在本机应用程序中嵌入 web 技术 (HTML、CSS 和 JavaScript \ ) 。 WebView2 控件使用 Microsoft Edge () Chromium 作为呈现引擎在本机应用程序中显示 web 内容。 使用 WebView2,你可以将 web 代码嵌入本机应用程序的不同部分,或在单个 Web 视图中构建整个本机应用程序。
这是Micosoft官方文档的说明,其实就是跟之前的WebBrowser一样,也是基于本地的浏览器内核引擎来渲染网页的,只不过这次使用的是Edge的Chromium内核。所以要使用WebView2就必然需要本地安装了Microsoft Edge Chromium版本链接: https://www.microsoftedgeinsider.com/zh-cn/.。
二、使用步骤
1.必备条件
请确保在继续之前安装了以下先决条件列表:
Microsoft Edge (Chromium 在 windows 10、windows 8.1 或 windows 7 上安装了) 的未放大频道。
Visual Studio 2017 或更高版本。
2.引入库
直接Nuget:(请注意必须使用预发行版本,稳定版本还不能使用)
直接在XAML里引入库
xmlns:wv2="clr-namespace:Microsoft.Web.WebView2.Wpf;assembly=Microsoft.Web.WebView2.Wpf"
<wv2:WebView2 x:Name="webView" Grid.Row="1" Source="https://www.baidu.com" />
1
2
3
此时会发现,程序并未F5运行,但设计窗口直接加载了百度的页面,说明直接使用Edge渲染了网页。这个对开发人员来说真是舒服呀。
经过测试发现:WebView2支持H264的视频解码,要知道CefSharp可是需要自己手工重编译CEF才行的呀。
在后台可通过调用 CoreWebView2Environment.GetAvailableBrowserVersionString() 来获取当前的浏览器内核版本
string coreWebView2Environment = CoreWebView2Environment.GetAvailableBrowserVersionString();
1
页面的跳转通过Navigate:
private void btnGo_Click(object sender, RoutedEventArgs e)
{
if (webView != null && webView.CoreWebView2 != null)
{
webView.CoreWebView2.Navigate(tbUrl.Text);
}
}
1
2
3
4
5
6
7
这里需要说明的是:必须对CoreWebView2进行初始化,看一下微软官方的解释是因为创建 CoreWebView2 是一个昂贵的操作,它涉及启动 Edge 浏览器进程之类的操作。
有两种方法可导致创建 CoreWebView2:
1)调用 EnsureCoreWebView2Async 方法。 这称为显式初始化。
2)设置 Source 属性(例如,可以通过标记执行此操作)。 这称为隐式初始化。
1
2
3
4
5
总结
WebView2未来应该是要替代WebBrowser的,虽然需要依赖本机自带的Edge chromium内核,但相信未来的windows 更新肯定会以Edge chromium内核代替IE内核,并且不需要重新下载Chrome浏览器,使用Edge也会有一样的浏览体验。而作为桌面开发人员来说,使用WebView2直接加载网页会比使用CefSharp来得更舒服,不再需要引入一堆的CEF类库,同时安装文件也会缩小很多。