提高開(kāi)發(fā)效率!深入探索微軟新發(fā)布的WebView2庫(kù)的應(yīng)用
一、WebView2庫(kù)簡(jiǎn)介
WebView2是微軟開(kāi)發(fā)的一個(gè)現(xiàn)代Web控件,它基于Microsoft Edge瀏覽器的內(nèi)部架構(gòu),提供高性能、安全穩(wěn)定、易用的Web控件。與傳統(tǒng)的WebBrowser控件相比,WebView2具有更好的跨平臺(tái)支持、更多的API接口、更好的性能和穩(wěn)定性。
二、WebView2庫(kù)使用場(chǎng)景
WebView2庫(kù)適用于多種場(chǎng)景,例如:
- 在Win32桌面應(yīng)用程序、UWP應(yīng)用程序和.NET應(yīng)用程序中嵌入現(xiàn)代Web技術(shù),為用戶提供更加現(xiàn)代化、豐富的用戶體驗(yàn)。
- 構(gòu)建不同類(lèi)型的瀏覽器插件、擴(kuò)展程序,為用戶提供更多的功能和服務(wù)。
- 作為游戲引擎的一部分,提供在線游戲運(yùn)行的支持。
- 開(kāi)發(fā)各種類(lèi)型的工具、應(yīng)用程序,如IDE、網(wǎng)站監(jiān)視器等。
三、WebView2庫(kù)的組件模塊
WebView2庫(kù)包括以下組件模塊:
- WebView2 Runtime:WebView2庫(kù)需要安裝對(duì)應(yīng)版本的WebView2運(yùn)行時(shí),以便在Windows上啟用它的功能
- WebView2 Loader:WebView2庫(kù)的底層加載器能夠快速地將WebView2控件加載到應(yīng)用程序中
- WebView2 Control:WebView2控件是WebView2庫(kù)的核心,可以在Windows應(yīng)用程序中嵌入現(xiàn)代Web技術(shù)
- WebView2 SDK:WebView2庫(kù)提供了豐富的API和開(kāi)發(fā)工具,幫助開(kāi)發(fā)人員更好地使用WebView2控件
四、WebView2庫(kù)的優(yōu)點(diǎn)和缺點(diǎn)
WebView2庫(kù)的優(yōu)點(diǎn):
- 高性能和穩(wěn)定性:WebView2庫(kù)基于Microsoft Edge瀏覽器內(nèi)部架構(gòu),具有更高的性能和穩(wěn)定性,為用戶提供更好的體驗(yàn)
- 多種語(yǔ)言支持:WebView2庫(kù)可以使用多種編程語(yǔ)言進(jìn)行開(kāi)發(fā),如C++、C#等
- 豐富的API接口:WebView2庫(kù)提供了大量的API接口,讓開(kāi)發(fā)人員可以更靈活地控制WebView2控件的行為
- 跨平臺(tái)支持:WebView2庫(kù)可以在多個(gè)操作系統(tǒng)上運(yùn)行,包括Windows、Linux、MacOS等
WebView2庫(kù)的缺點(diǎn):
- 安裝WebView2運(yùn)行時(shí):WebView2庫(kù)需要安裝對(duì)應(yīng)版本的WebView2運(yùn)行時(shí),以便在Windows上啟用它的功能
- 庫(kù)文件較大:WebView2庫(kù)的庫(kù)文件比傳統(tǒng)的WebBrowser控件庫(kù)文件要大,可能會(huì)占用一定的存儲(chǔ)空間
五、WebView2庫(kù)API用法
WebView2庫(kù)提供了豐富的API和開(kāi)發(fā)工具,讓開(kāi)發(fā)人員可以更輕松、靈活地控制WebView2控件的行為。以下是WebView2庫(kù)中常用的一些API介紹:
1、CoreWebView2
CoreWebView2是WebView2庫(kù)的核心類(lèi),它表示一個(gè)WebView2控件實(shí)例。CoreWebView2包含了WebView2控件的大部分功能,如導(dǎo)航、JavaScript交互、事件處理等。
常用屬性和方法:
- AddScriptToExecuteOnDocumentCreatedAsync(string script):將一個(gè)JavaScript腳本添加到文檔創(chuàng)建時(shí)執(zhí)行的腳本列表中。
- AddScriptToExecuteOnPageCompletedAsync(string script):將一個(gè)JavaScript腳本添加到頁(yè)面完成時(shí)執(zhí)行的腳本列表中。
- ExecuteScriptAsync(string script):執(zhí)行一個(gè)JavaScript腳本并返回結(jié)果。
- Navigate(string uri):導(dǎo)航到指定的URL地址。
- Stop():停止WebView2控件當(dāng)前的所有導(dǎo)航操作。
- GoBack():將WebView2控件的導(dǎo)航歷史記錄向后移動(dòng)一步。
- GoForward():將WebView2控件的導(dǎo)航歷史記錄向前移動(dòng)一步。
- Reload():重新加載當(dāng)前頁(yè)面。
- CapturePreviewAsync(Stream imageStream, ImageFormat imageFormat):捕獲當(dāng)前頁(yè)面的預(yù)覽圖像。
事件:
- CoreWebView2InitializationCompleted:當(dāng)CoreWebView2對(duì)象初始化完成時(shí)觸發(fā)的事件。
- NavigationStarting:當(dāng)WebView2控件開(kāi)始導(dǎo)航時(shí)觸發(fā)的事件。
- ContentLoading:當(dāng)WebView2控件開(kāi)始加載內(nèi)容時(shí)觸發(fā)的事件。
- SourceChanged:當(dāng)WebView2控件的源URL地址發(fā)生變化時(shí)觸發(fā)的事件。
- ContentLoaded:當(dāng)WebView2控件完成載入內(nèi)容后觸發(fā)的事件。
2、CoreWebView2Environment
CoreWebView2Environment表示一個(gè)WebView2運(yùn)行環(huán)境,它提供了WebView2控件和WebView2控件相關(guān)組件的管理和初始化功能。
常用屬性和方法:
- CreateCoreWebView2Controller(IntPtr parentWindow, Action<CoreWebView2Controller> controllerCreatedCallback):創(chuàng)建一個(gè)CoreWebView2Controller實(shí)例并放置到指定的父窗口中。
- CreateCoreWebView2EnvironmentWithOptions(CoreWebView2EnvironmentOptions environmentOptions, Action<CoreWebView2Environment> environmentCreatedCallback):根據(jù)指定的選項(xiàng)創(chuàng)建一個(gè)CoreWebView2Environment實(shí)例。
3、CoreWebView2Controller
CoreWebView2Controller是WebView2控件和WebView2運(yùn)行環(huán)境之間的橋梁,它負(fù)責(zé)管理WebView2控件的生命周期、與瀏覽器的交互等。
常用屬性和方法:
- CoreWebView2:獲取當(dāng)前CoreWebView2Controller對(duì)象關(guān)聯(lián)的CoreWebView2實(shí)例。
- Close():關(guān)閉CoreWebView2Controller對(duì)象和關(guān)聯(lián)的CoreWebView2實(shí)例。
- AddRemoteObject(string name, object obj):將一個(gè).NET對(duì)象公開(kāi)為JavaScript可訪問(wèn)的遠(yuǎn)程對(duì)象。
- RemoveRemoteObject(string name):從CoreWebView2Controller對(duì)象中刪除一個(gè)已公開(kāi)的遠(yuǎn)程對(duì)象。
4、CoreWebView2Settings
CoreWebView2Settings表示W(wǎng)ebView2控件的一些設(shè)置,如縮放級(jí)別、內(nèi)核啟用狀態(tài)等。
常用屬性:
- IsScriptEnabled:獲取或設(shè)置WebView2控件是否允許JavaScript腳本執(zhí)行。
- IsWebMessageEnabled:獲取或設(shè)置WebView2控件是否允許使用Web消息。
5、CoreWebView2EnvironmentOptions
CoreWebView2EnvironmentOptions定義了創(chuàng)建CoreWebView2Environment時(shí)的一些選項(xiàng)和設(shè)置。
常用屬性和方法:
- BrowserExecutableFolder:獲取或設(shè)置運(yùn)行WebView2控件時(shí)使用的瀏覽器可執(zhí)行文件路徑。
- UserDataFolder:獲取或設(shè)置WebView2控件使用的用戶數(shù)據(jù)存儲(chǔ)文件夾路徑。
這些API只是WebView2庫(kù)的一部分,還有更多功能和用法可以在Microsoft官方文檔中找到。
六、winform引用WebView2庫(kù)案例說(shuō)明
using Microsoft.Web.WebView2.Core;
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
webView21.CreationProperties = new CoreWebView2CreationProperties()
{
BrowserExecutableFolder = @"C:\Program Files (x86)\Microsoft\Edge\Application\91.0.864.48",
UserDataFolder = @"C:\Temp",
};
webView21.CoreWebView2InitializationCompleted += WebView21_CoreWebView2InitializationCompleted;
webView21.Source = new Uri("https://www.bing.com");
}
private async void WebView21_CoreWebView2InitializationCompleted(object sender, CoreWebView2InitializationCompletedEventArgs e)
{
await webView21.CoreWebView2.AddScriptToExecuteOnDocumentCreatedAsync("document.body.style.backgroundColor = 'lightblue';");
await webView21.CoreWebView2.AddScriptToExecuteOnDocumentCreatedAsync("console.log('Hello from JavaScript!');");
await webView21.CoreWebView2.Navigate("https://www.bing.com");
}
}
在這個(gè)例子中,我們?cè)赪inform應(yīng)用程序中使用了WebView2控件。我們首先初始化了WebView2控件,然后通過(guò)編寫(xiě)
CoreWebView2InitializationCompleted事件處理程序與WebView2進(jìn)行交互。在這個(gè)例子中,我們通過(guò)AddScriptToExecuteOnDocumentCreatedAsync方法執(zhí)行JavaScript腳本,并使用Navigate方法加載URL。
七、WFP引入WebView2庫(kù)案例說(shuō)明
以下是一個(gè)使用WPF框架和WebView2庫(kù)的簡(jiǎn)單案例:
首先需要在項(xiàng)目中安裝Microsoft.Web.WebView2 NuGet包。
在XAML中添加WebView2控件:
<Window x:Class="WpfApp1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:wv2="clr-namespace:Microsoft.Web.WebView2.Wpf;assembly=Microsoft.Web.WebView2.Wpf"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<Grid>
<wv2:WebView2 Margin="10"/>
</Grid>
</Window>
在C#代碼中初始化WebView2控件并加載URL:
using Microsoft.Web.WebView2.Core;
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
webView.CreationProperties = new CoreWebView2CreationProperties()
{
BrowserExecutableFolder = @"C:\Program Files (x86)\Microsoft\Edge\Application\91.0.864.48",
UserDataFolder = @"C:\Temp",
};
webView.CoreWebView2InitializationCompleted += WebView_CoreWebView2InitializationCompleted;
}
private async void WebView_CoreWebView2InitializationCompleted(object sender, CoreWebView2InitializationCompletedEventArgs e)
{
await webView.CoreWebView2.AddScriptToExecuteOnDocumentCreatedAsync("document.body.style.backgroundColor = 'lightblue';");
await webView.CoreWebView2.AddScriptToExecuteOnDocumentCreatedAsync("console.log('Hello from JavaScript!');");
await webView.CoreWebView2.Navigate("https://www.bing.com");
}
}
在這個(gè)例子中,我們?cè)赪PF應(yīng)用程序中使用了WebView2控件。我們首先初始化了WebView2控件,然后通過(guò)編寫(xiě)
CoreWebView2InitializationCompleted事件處理程序與WebView2進(jìn)行交互。在這個(gè)例子中,我們通過(guò)AddScriptToExecuteOnDocumentCreatedAsync方法執(zhí)行JavaScript腳本,并使用Navigate方法加載URL。
八、總結(jié)
WebView2庫(kù)是微軟開(kāi)發(fā)的一個(gè)現(xiàn)代Web控件,它基于Microsoft Edge瀏覽器的內(nèi)部架構(gòu),提供高性能、安全穩(wěn)定、易用的Web控件。WebView2庫(kù)可以適用于多種場(chǎng)景、跨平臺(tái)支持、提供豐富的API接口等優(yōu)點(diǎn);但也需要安裝WebView2運(yùn)行時(shí)、庫(kù)文件較大等缺點(diǎn)。在Winform或者WPF應(yīng)用程序中使用WebView2的方法與傳統(tǒng)的WebBrowser控件相比更加現(xiàn)代化、穩(wěn)定,提供更好的用戶體驗(yàn)和應(yīng)用場(chǎng)景。