C#中WebView2调用与交互实现

简要说明:

此控件实际上是 [WebView2 COM API] (https://aka.ms/webview2) 的包装器。
 可以通过访问 Microsoft.Web.WebView2.Wpf.WebView2.CoreWebView2 属性来直接访问基础 ICoreWebView2 接口及其所有功能。
一些最常见的 COM 功能也可以通过控件上的包装器方法/属性/事件直接访问。创建时,控件的 Microsoft.Web.WebView2.Wpf.WebView2.CoreWebView2 属性将为 null。
  这是因为创建 Microsoft.Web.WebView2.Wpf.WebView2.CoreWebView2 是一项成本高昂的操作,涉及启动 Edge 浏览器进程等操作。
  有两种方法可以导致创建

注意:这里使用的是WPF的框架,版本是.NET Framework 4.6

一、效果展示

1、传递数据

2、调用弹窗

3、回传信息

二、实现代码

1、包引用

2、界面添加

3、事件关联与初始化

    private async void RecvMsg_Loaded(object sender, RoutedEventArgs e)
    {
        InitializeComponent();
        await webView.EnsureCoreWebView2Async(null);

        webView.Source = new Uri(AppDomain.CurrentDomain.BaseDirectory + "ChartFile\\ContourLineChart.html");
        webView.CoreWebView2.WebMessageReceived += WebView_WebMessageReceived;
    }

    private void WebView_WebMessageReceived(object sender, Microsoft.Web.WebView2.Core.CoreWebView2WebMessageReceivedEventArgs e)
    {
        Console.WriteLine("WebView_WebMessageReceived:"+e.WebMessageAsJson);
     //  var p= JsonConvert.DeserializeObject<Preson>(e.WebMessageAsJson);
    }

需要注意,消息接收事件注册需要在控件初始化完成后,不然对象为空,会报错。JavaScript传递参数时,会默认序列化对象,对于传递对象数据时,C#层面接收后可以直接进行反序列化成对象,这样后序操作更加友好。当然怎么设计传递参数和怎么使用,需要使用者结合实际情况进行合理设计。

4、数据传递调用

1)、序列方式数据

   para = "jsUpdateROIData(true,0,33937.536,true,0,33937.536," +
       "true,[0.0,0.0,0.0,0.0],true,[0.0,0.0,0.0,0.0]," +
       "false,0,0,0,0,false,0,0,0,0,true)";

    webView.ExecuteScriptAsync(para);

2)、单个数据方式

 public void ExeCall2(int num1, int num2)
 {
     string para = $"calAdd({num1},{num2})";
     webView.Dispatcher.Invoke(Process);

     void Process()
     {
         var r = webView.ExecuteScriptAsync(para);
         r.ContinueWith(t =>
         {
             Console.WriteLine("执行结果2:" + t.Result);
         });
     }
 }

5、后台Html文件

1)、数据显示函数

 function jsUpdateROIData(isShowRoi1, dValueRoi1, zValueRoi1, isShowRoi2, dValueRoi2, zValueRoi2,
            flagroi1, Param1, flagroi2, Param2,
            isShowLine1, Line1x1, Line1y1, Line1x2, Line1y2, isShowLine2, Line2x1, Line2y1, Line2x2, Line2y2, isShowMarkArea) {

            option.series[1].data = null;
            option.series[2].data = null;

            ShowRoi1ResultPoint(isShowRoi1, dValueRoi1, zValueRoi1);
            ShowRoi2ResultPoint(isShowRoi2, dValueRoi2, zValueRoi2);
            SetROiPoint(flagroi1, Param1, flagroi2, Param2);
            ShowRoi1ResultLine(isShowLine1, Line1x1, Line1y1, Line1x2, Line1y2);
            ShowRoi2ResultLine(isShowLine2, Line2x1, Line2y1, Line2x2, Line2y2);
            ShowMarkArea(isShowMarkArea);

        }

2)、交互函数

function calAdd(num1, num2) {
            var result = num1 + num2;
            alert("传入参数 num1=" + num1 + ",num2=" + num2 + " num1+num2= " + result);
            return result;
        }

3)、消息发送函数

function SendMessage(msg) {

            window.chrome.webview.postMessage(msg);
        }

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C#使用WebView2控件,可以通过以下步骤与网页的JavaScript进行交互: 1. 首先,确保你已经在项目安装了Microsoft.Web.WebView2 NuGet包。 2. 在XAML文件,将WebView2控件添加到窗口: ```xml <Window ... xmlns:wv2="clr-namespace:Microsoft.Web.WebView2.Wpf;assembly=Microsoft.Web.WebView2.Wpf" > <Grid> <wv2:WebView2 x:Name="webView" Source="https://www.example.com" /> </Grid> </Window> ``` 3. 在代码,可以使用以下代码来在WebView2控件加载完成后添加JavaScript事件监听器: ```csharp private async void WebView_CoreWebView2Ready(object sender, RoutedEventArgs e) { await webView.EnsureCoreWebView2Async(); webView.CoreWebView2.WebMessageReceived += CoreWebView2_WebMessageReceived; } ``` 4. 接下来,你可以通过以下代码向网页注入JavaScript代码: ```csharp await webView.CoreWebView2.AddScriptToExecuteOnDocumentCreatedAsync("function sendMessageToHost(message) { window.chrome.webview.postMessage(message); }"); ``` 5. 在网页,你可以通过以下代码与C#代码进行通信: ```javascript // 向C#发送消息 window.chrome.webview.postMessage("Hello from JavaScript!"); // 接收C#发送的消息 window.chrome.webview.addEventListener('message', event => { console.log(`Received message: ${event.data}`); }); ``` 6. 在C#代码,你可以通过以下代码接收来自网页的消息: ```csharp private void CoreWebView2_WebMessageReceived(object sender, CoreWebView2WebMessageReceivedEventArgs e) { string message = e.TryGetWebMessageAsString(); Console.WriteLine($"Received message: {message}"); } ``` 以上就是在C#使用WebView2控件与网页的JavaScript进行交互的步骤。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值