WebView在WPF中的应用

开发环境

运行环境 .net 6

1.安装WebView2

//通过Nuget控制台来安装,安装命令如下,或者通过Nuget包管理器安装
Install-Package Microsoft.Web.WebView2

1.在窗体中引用命名空间:

xmlns:wv2="clr-namespace:Microsoft.Web.WebView2.Wpf;assembly=Microsoft.Web.WebView2.Wpf"

2.使用webView2的控件

<wv2:WebView2 Name="webView"/>

2.使用WebView2

默认情况下,如果控件中没有设置Source属性,CoreWebView2是没有初始化的,此时需要我们手动初始化CoreWebView2,CoreWebView2初始化有以下两种方式:第一种是上述的一种不直接使用Source属性,这样更灵活一些。
第一种:

//初始化WebView的新实例
await webView.EnsureCoreWebView2Async(null);

第二种:

webView.Source = new Url("https://www.baidu.com");

3.如何使用js来调用C#

1.C# 中的写法

public class TestWebView{
 public void Test()
 {
 	MessageBox.Show("test");
 }
}


webView.CoreWebView2.AddHostObjectToScript("TestWebView", new TestWebView());

2.js中的写法

const test = chrome.webview.hostObjects.TestWebView;
await test .Test("Test...");

这样就可以在js中执行C#中的方法或者说宿主的方法了。

4.使用C#来调用js

//其中 message() 是在js中定义的方法
string result = await webView.ExecuteScriptAsync("message()");

5.js与C#之间的通信 (也可用作方法之间的调用)

相较于上述所提的通过JS实现WebView2宿主程序和前端页面进行通信的方法,在WebView2中,更加通用而高效的方式是WebMessage,它是一个异步的消息通信,并且支持双向通信。

WebView2 控件中的 Web 内容可以使用 window.chrome.webview.postMessage 向宿主程序发布消息。宿主程序使用任何注册到 WebMessageReceived 委托方法处理消息。
主程序使用 CoreWebView2.PostWebMessageAsString 或 CoreWebView2.PostWebMessageAsJSON 将消息发布到 WebView2 控件中的 Web 内容。这些消息由添加到 window.chrome.webview.addEventListener 的处理程序捕获。

1.js发送消息到C#

在webView2中定义事件来处理接收到的消息:

webView.CoreWebView2.WebMessageReceived += UpdateAddressBar;

void UpdateAddressBar(object sender, CoreWebView2WebMessageReceivedEventArgs args)
        {
            //String uri = args.TryGetWebMessageAsString();
            //webView.CoreWebView2.PostWebMessageAsString(uri);
            //接收到的字符串
            string msg = args.TryGetWebMessageAsString();
            //接收到的json
            string msgJson = args.WebMessageAsJson;

        }

在js中发送消息:

var args = "msg ,from webView2";
window.chrome.webview.postMessage(args);

2.C#发送消息到js

在js中注册消息的处理函数:

chrome.webview.addEventListener('message', event => alert(event.data));

在C#中发送消息:

//两种方式都可以
webView.CoreWebView2.PostWebMessageAsString("hello world");
webView.CoreWebView2.PostWebMessageAsJson("hello world");

到这里基本使用就完成了 ,希望可以帮助到更多的朋友,之前使用WebBrowser在es6的语法下尤其是使用ie内核的浏览器会有很多兼容的问题 后面发现了WebView2,整体来说很好用,兼容性也不错,研究了一天的成果希望可以帮助到大家。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值