
WinForm中使用WebView2进行JS和C#交互示例
5星
- 浏览量: 0
- 大小:None
- 文件类型:RAR
简介:
本文介绍了如何在WinForm应用程序中集成WebView2控件,并通过它实现JavaScript与C#代码之间的数据交互。提供了一个详细的示例来展示具体操作步骤和方法。
在.NET Framework或.NET Core的Windows Forms(WinForm)应用程序中经常需要集成Web视图以展示网页内容,并且可能还需要与其中的JavaScript代码进行交互。微软提供了WebView2控件,它是基于Chromium内核的新一代Web视图工具,使得在WinForm应用中实现现代Web技术集成变得更加容易。
本示例展示了如何使用C#中的WebView2控件来实现在Windows Forms应用程序中JavaScript和C#之间的双向通信。“WinForm下WebView2实现JS与C#交互Demo”提供了详细的步骤说明。
首先确保安装了Microsoft Edge WebView2 SDK。可以通过NuGet包管理器安装`Microsoft.WebView2.WinForms`包,然后在项目中引入`Microsoft.WebView2.WinForms`命名空间以使用WebView2控件。
接着,在WinForm设计器中添加一个WebView2控件到窗体上,并在其代码文件中初始化它:
```csharp
private Microsoft.WebView2.WinForms.WebView2 webView2;
private async void Form1_Load(object sender, EventArgs e)
{
webView2 = new Microsoft.WebView2.WinForms.WebView2();
webView2.Dock = DockStyle.Fill;
Controls.Add(webView2);
设置初始URL
webView2.Source = new Uri(https://example.com);
加载完成事件
webView2.CoreWebView2InitializationCompleted += (sender, args) =>
{
设置用户数据目录
webView2.CoreWebView2.Environment = await Microsoft.WebView2.Core.CoreWebView2Environment.CreateAsync(null, null);
};
}
```
接下来,实现JavaScript和C#之间的交互。通过`AddScriptToExecuteOnDocumentCreated`方法可以在网页加载时执行一段JavaScript代码,这段代码可以注册一个全局函数来调用C#中的相应方法:
```csharp
private void RegisterJsCallCSharp()
{
webView2.CoreWebView2.AddScriptToExecuteOnDocumentCreatedAsync(
window.callCSharp = function(param) { window.chrome.webview.postMessage(param); });
}
```
这里定义了一个`callCSharp`函数,用于从JavaScript中调用C#方法并传递参数。
为了接收来自JavaScript的postMessage消息,我们需要监听`WebMessageReceived`事件,并在该事件处理程序中解析接收到的消息以执行相应的操作:
```csharp
private async void WebView2_CoreWebView2WebMessageReceived(object sender, Microsoft.WebView2.Core.CoreWebView2WebMessageReceivedEventArgs e)
{
string message = e.Message.ToString();
await webView2.CoreWebView2.ExecuteScriptAsync($console.log(C# received: {message}););
调用C#方法处理接收到的消息
ProcessMessage(message);
}
```
同时,从C#调用JavaScript代码也很简单。可以使用`ExecuteScriptAsync`方法执行任意的JavaScript代码:
```csharp
private async void CallJsFunctionFromCSharp(string functionName, params object[] args)
{
StringBuilder script = new StringBuilder();
script.Append(functionName);
script.Append(();
for (int i = 0; i < args.Length; i++)
{
if (i > 0)
script.Append(,);
script.Append(JsonConvert.SerializeObject(args[i]));
}
script.Append(););
await webView2.CoreWebView2.ExecuteScriptAsync(script.ToString());
}
```
这个`CallJsFunctionFromCSharp`方法可以接受一个函数名及任意数量的参数,将其序列化为JSON字符串并拼接成JavaScript调用语句。
通过上述步骤,在WinForm应用中实现了WebView2控件的集成,并且允许JavaScript和C#之间进行双向通信。这对于需要在桌面应用程序与网页间交互的应用场景非常有用,例如从网页触发桌面功能或者更新页面内容等操作。“WinForm下WebView2实现JS与C#交互Demo”提供了一个基础模板,可以根据具体需求进一步扩展和调整。
全部评论 (0)


