122 lines
2.9 KiB
Markdown
122 lines
2.9 KiB
Markdown
# WebView2 入门
|
||
|
||
## 什么是 WebView2
|
||
|
||
在 Windows 桌面应用里嵌入 Chrome 内核浏览器。
|
||
|
||
```
|
||
┌─────────────────────────┐
|
||
│ WPF / WinForms │
|
||
│ ┌───────────────────┐ │
|
||
│ │ WebView2 │ │
|
||
│ │ (Chrome 内核) │ │
|
||
│ │ │ │
|
||
│ │ ┌─────────────┐ │ │
|
||
│ │ │ HTML/CSS/JS │ │ │
|
||
│ │ │ 你的界面 │ │ │
|
||
│ │ └─────────────┘ │ │
|
||
│ └───────────────────┘ │
|
||
│ │
|
||
│ C# 代码 │
|
||
└─────────────────────────┘
|
||
```
|
||
|
||
## 安装 WebView2 Runtime
|
||
|
||
下载地址:https://developer.microsoft.com/en-us/microsoft-edge/webview2/
|
||
|
||
## NuGet 包
|
||
|
||
```bash
|
||
dotnet add package Microsoft.Web.WebView2
|
||
```
|
||
|
||
## XAML 使用
|
||
|
||
```xml
|
||
<Window xmlns:wv2="clr-namespace:Microsoft.Web.WebView2.Wpf;assembly=Microsoft.Web.WebView2.Wpf">
|
||
<Grid>
|
||
<wv2:WebView2 x:Name="WebView"
|
||
Source="https://example.com"/>
|
||
</Grid>
|
||
</Window>
|
||
```
|
||
|
||
## 初始化
|
||
|
||
```csharp
|
||
private async void InitializeWebView()
|
||
{
|
||
await WebView.EnsureCoreWebView2Async();
|
||
Console.WriteLine("WebView2 初始化成功");
|
||
}
|
||
```
|
||
|
||
## C# 调用 JS
|
||
|
||
```csharp
|
||
// 执行 JS
|
||
await WebView.ExecuteScriptAsync("alert('Hello from C#')");
|
||
|
||
// 获取返回值
|
||
string result = await WebView.ExecuteScriptAsync("document.title");
|
||
```
|
||
|
||
## JS 调用 C#
|
||
|
||
```csharp
|
||
// C# 注册方法
|
||
WebView.CoreWebView2.WebMessageReceived += (s, e) =>
|
||
{
|
||
string message = e.TryGetWebMessageAsString();
|
||
Console.WriteLine($"收到JS消息: {message}");
|
||
};
|
||
```
|
||
|
||
```javascript
|
||
// JS 发送消息
|
||
window.chrome.webview.postMessage("Hello from JS");
|
||
```
|
||
|
||
## 常用操作
|
||
|
||
```csharp
|
||
WebView.Reload(); // 刷新
|
||
WebView.GoBack(); // 后退
|
||
WebView.GoForward(); // 前进
|
||
WebView.Navigate("https://..."); // 导航到 URL
|
||
WebView.CoreWebView2.Settings // 配置
|
||
```
|
||
|
||
## 本地 HTML
|
||
|
||
```csharp
|
||
// 加载本地 HTML 文件
|
||
string htmlPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "index.html");
|
||
WebView.CoreWebView2.Navigate(new Uri(htmlPath).AbsoluteUri);
|
||
|
||
// 或者直接加载 HTML 字符串
|
||
string html = "<h1>Hello</h1>";
|
||
WebView.NavigateToString(html);
|
||
```
|
||
|
||
## 项目里怎么用
|
||
|
||
```
|
||
无言势字幕/
|
||
├── MainWindow.xaml ← WPF 窗口,放 WebView2
|
||
├── index.html ← 你的界面(HTML/CSS/JS)
|
||
├── WebViewManager.cs ← C# 和 JS 通信
|
||
└── AsrService.cs ← 语音识别服务
|
||
```
|
||
|
||
C# 负责:
|
||
- 语音识别(Sherpa-ONNX)
|
||
- OSC 发送
|
||
- 窗口管理
|
||
|
||
HTML/JS 负责:
|
||
- 界面显示
|
||
- 动画效果
|
||
- 用户交互
|