前言
已更新後續: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類庫,同時安裝文件也會縮小很多。