前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >.NET混合开发解决方案11 WebView2加载的网页中JS调用C#方法

.NET混合开发解决方案11 WebView2加载的网页中JS调用C#方法

作者头像
张传宁IT讲堂
发布于 2022-05-11 06:15:33
发布于 2022-05-11 06:15:33
11.3K10
代码可运行
举报
运行总次数:0
代码可运行

系列目录     【已更新最新开发文章,点击查看详细】

WebView2控件应用详解系列博客 .NET桌面程序集成Web网页开发的十种解决方案 .NET混合开发解决方案1 WebView2简介 .NET混合开发解决方案2 WebView2与Edge浏览器的区别 .NET混合开发解决方案3 WebView2的进程模型 .NET混合开发解决方案4 WebView2的线程模型 .NET混合开发解决方案5 WebView2运行时与分发应用 .NET混合开发解决方案6 检测是否已安装合适的WebView2运行时 .NET混合开发解决方案7 WinForm程序中通过NuGet管理器引用集成WebView2控件 .NET混合开发解决方案8 WinForm程序中通过设置固定版本运行时的BrowserExecutableFolder属性集成WebView2控件 .NET混合开发解决方案9 WebView2控件的导航事件 .NET混合开发解决方案10 WebView2控件调用网页JS方法

  在我的博客《.NET混合开发解决方案10 WebView2控件调用网页JS方法》中介绍了C#调用网页中定义的JavaScript方法以执行某种业务逻辑,同样WebView2控件中加载的网页中自定义的JavaScript方法中也可以调用C#方法。

  WebView2控件通过将对象传递到Web网页,使应用程序能够弥合web和本机应用程序(客户端程序:WinForm、WPF、WinUI、Win32)之间的鸿沟。此类对象在本机代码中定义,通常称为主机对象。可以使用WebView2的AddHostObjectToScript()将它们投影到JavaScript中。

  在开发WebView2应用程序时,需要一个本机对象,它的方法或属性很有用。开发者希望从web端代码触发这些本机对象方法,或者作为应用程序web端用户交互的结果。最主要的是开发者不想也不需要在web端代码中重新实现本机对象的方法。AddHostObjectToScript API支持web端代码重用本机端代码。

  比如在网页中调用客户端电脑的摄像头,如果在Web端开发,则编写大量的代码。如果在本机实现,则非常简单。能够调用本机对象的方法比在应用程序的web端重新编码对象的方法更快、效率更高。在这种情况下,本机端代码可以将对象传递到应用程序的web端JavaScript代码,以便JavaScript代码可以重用本机API的方法。如以下应用场景:

  • 有一个键盘API,你想调用keyboardObject。从web端显示键盘功能。
  • JavaScript是沙盒,限制了它在本机端的能力。例如,如果需要在本机端访问文件,则必须使用本机文件系统。如果您有一个通过AddHostObjectToScript向JavaScript公开的本机对象,则可以使用它来操作本机文件系统上的文件。

下面通过一个Demo来讲解如何实现JS调用C#方法。

业务场景:JS调用C#方法,传递三个参数,分别是num1、num2、message。C#接收到参数后将num1与num2进行加法运算,并将计算结果返回给JS方法。

先看一下示例效果

下面详细介绍其实现步骤。

步骤1

定义一个主机对象,如:CustomWebView2HostObject类,在类中编写方法并实现内部业务逻辑。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
using System.Runtime.InteropServices;

namespace WebView2Demo_WinForm
{
    /// <summary>
    /// 自定义宿主类,用于向网页注册C#对象,供JS调用
    /// </summary>
    [ClassInterface(ClassInterfaceType.AutoDual)]
    [ComVisible(true)]
    public class CustomWebView2HostObject
    {
        public string TestCalcAddByCsharpMethod(int num1, int num2, string message)
        {
            MessageBox.Show($"C#方法接收到J传入的参数 num1={num1},num2={num2},message={message}", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);

            return "计算结果为:" + (num1 + num2);
        }
    }
}

自定义的 CustomWebView2HostObject 类,必须标记 ClassInterface(ClassInterfaceType.AutoDual)、ComVisible(true) 特性,否则JS无法访问到该类

C#方法与平时写的代码完全一样。

步骤2

在访问目标网页之前,通过webView2.CoreWebView2.AddHostObjectToScript()方法向网页中注入主机对象,其中第一个参数是自定义名称(随意命名),JS中访问主机对象时就需要与该参数名称一致。

步骤3

网页中定义一个测试按钮,并设置点击事件

点击事件中,第31行获取主机对象,customWebView2HostObject 与 C#中定义的名称需要完全相同。

使用主机对象调用C#方法,由于调用过程是异步的,所以需要使用 await,方法定义前需要加上 async。

以上三步完成后即实现了JS访问C#方法。

系列目录     【已更新最新开发文章,点击查看详细】

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-05-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
1 条评论
热度
最新
iframe调用AddHostObjectToScript需要第三个参数是什么意思呢
iframe调用AddHostObjectToScript需要第三个参数是什么意思呢
回复回复点赞举报
推荐阅读
编辑精选文章
换一批
.NET混合开发解决方案12 网页JS调用C#方法访问WinForm或WPF窗体
  在前一篇博客《.NET混合开发解决方案11 网页JS调用C#方法》中介绍了JS访问C#方法的简单实现方式。但是在企业级应用软件中业务需求可能更加复杂,如JS调用C#方法之后,需要访问宿主的窗体,设置窗体(WinForm、WPF、WinUI、Win32)中的控件等。
张传宁IT讲堂
2022/05/11
2.6K0
.NET混合开发解决方案12 网页JS调用C#方法访问WinForm或WPF窗体
.NET混合开发解决方案10 WebView2控件调用网页JS方法
  客户端程序(WinForm、WPF、Win32、WinUI)集成WebView控件加载Web完成后,还有两种常见的需求
张传宁IT讲堂
2022/05/09
3.3K0
.NET混合开发解决方案10 WebView2控件调用网页JS方法
.NET混合开发解决方案24 WebView2对比CefSharp的超强优势
.NET混合开发解决方案19 使用 DevTools 协议帮助程序  .NET混合开发解决方案20 使用 Microsoft Edge WebDriver 自动执行和测试 WebView2 应用 .NET混合开发解决方案21 WebView2 应用的开发最佳做法 .NET混合开发解决方案22 开发安全的 WebView2 应用 .NET混合开发解决方案23 将 WebView2 应用分发为单个可执行文件
张传宁IT讲堂
2022/06/30
3.5K0
.NET混合开发解决方案24 WebView2对比CefSharp的超强优势
.NET混合开发解决方案14 WebView2的基本身份验证
  WebView2 应用的基本身份验证包括从 HTTP 服务器检索网页的一系列身份验证和导航步骤。 WebView2 控件充当主机应用和 HTTP 服务器之间通信的中介。
张传宁IT讲堂
2022/05/13
1.9K0
.NET混合开发解决方案14 WebView2的基本身份验证
.NET混合开发解决方案4 WebView2的线程模型
  WebView2控件基于组件对象模型(COM),必须在单线程单元(STA)线程上运行。
张传宁IT讲堂
2022/05/09
3.5K0
.NET混合开发解决方案4 WebView2的线程模型
.NET混合开发解决方案16 管理WebView2的用户数据
  在我的博客《.NET混合开发解决方案15 WebView2控件集成到WinForm程序编译后的文件及结构说明》中介绍了将WebView2控件集成到WinForm程序中编译后的文件及结构信息
张传宁IT讲堂
2022/05/15
2.5K0
.NET混合开发解决方案16 管理WebView2的用户数据
.NET混合开发解决方案13 自定义WebView2中的上下文菜单
对比可以看出WebView2控件中的右键上下文菜单内容比Edge浏览器中网页的右键右键上下文菜单的数量少。结合我的博客《.NET混合开发解决方案2 WebView2与Edge浏览器的区别》可知,WebView2控件中对于网页右键上下文菜单做了裁剪。
张传宁IT讲堂
2022/05/12
3.2K0
.NET混合开发解决方案13 自定义WebView2中的上下文菜单
.NET混合开发解决方案1 WebView2简介
  在我的博客《.NET桌面程序集成Web网页开发的多种解决方案》中介绍了10种.NET集成网页开发的控件。本系列着重介绍 Microsoft Edge WebView2 组件技术。
张传宁IT讲堂
2022/05/09
2.2K0
.NET混合开发解决方案1 WebView2简介
.NET混合开发解决方案9 WebView2控件的导航事件
  在我的博客《.NET混合开发解决方案7 WinForm程序中集成WebView2》中介绍了WinForm程序中集成WebView2组件的详细步骤以及注意事项。这只是最基本的应用,WebView2功能之所以强大,是因为它提供了很多开放的属性与事件供开发者调用以完成复杂的功能。具体可以参考我的博客《.NET混合开发解决方案2 WebView2与Edge浏览器的区别》。
张传宁IT讲堂
2022/05/09
1.1K0
.NET混合开发解决方案9 WebView2控件的导航事件
微软的混合开发解决方案 WebView2
我们都知道对于桌面应用开发来说,人们常用的方式就是采用c++或者c#,java等进行开发,然而这些语言开发效率不够高,不如网页开发灵活。因此,人们思考能否采用html+css+js的方式来开发桌面客户端呢,于是人们就提出了混合开发概念,并且开发了electron框架进行桌面开发。
程序那些事儿
2023/03/07
2K0
微软的混合开发解决方案 WebView2
.NET混合开发解决方案8 WinForm程序中通过设置固定版本运行时的BrowserExecutableFolder属性集成WebView2控件
  在我的博客《.NET混合开发解决方案7 WinForm程序中通过NuGet管理器引用集成WebView2控件》中介绍了WinForm程序中集成WebView2控件的基本实现方式,首先通过NuGet管理器引用Microsoft.Web.WebView2控件
张传宁IT讲堂
2022/05/09
1.3K0
.NET混合开发解决方案8 WinForm程序中通过设置固定版本运行时的BrowserExecutableFolder属性集成WebView2控件
C#开发BIMFACE系列53 WinForm程序中使用CefSharp加载模型图纸1 简单应用
  在我的博客《C#开发BIMFACE系列52 CS客户端集成BIMFACE应用的技术方案》中介绍了多种集成BIMFACE到客户端程序中的方案。最后推荐大家使用 CefSharp组件与WebView2组件。本篇文章介绍使用CefSharp组件如何集成BIMFACE到客户端程序中。
张传宁IT讲堂
2021/10/21
2.6K0
WPF开发-使用WebView2加载页面及页面交互
WebView2和CEF相比,在WPF中CEF相当于把渲染的界面生成图片再加载,而WebView2则没有这一步,性能有显著提升。
码客说
2022/06/12
10.1K0
WPF开发-使用WebView2加载页面及页面交互
.NET桌面程序集成Web网页开发的十种解决方案
  B/S架构的Web程序几乎占据了应用软件的绝大多数市场,但是C/S架构的WinForm、WPF客户端程序依然具有很实用的价值,如设计类软件 AutoCAD与Autodesk Revit、WPS、IT类的集成开发环境(数据库、图形处理软件)、PC端的小工具等等,充分利用了客户端电脑的资源综合计算能力,处理性能更加优秀。如果想在C/S架构的客户端程序中集成Web应用,也只能借助Web网页,然后将网页集成到客户端程序中,这样就间接的达到了目的。下面是客户端审图系统中集成Web网页的实际应用案例
张传宁IT讲堂
2022/05/09
3.2K0
.NET桌面程序集成Web网页开发的十种解决方案
WinForm嵌入Web网页的解决方案
  企业级信息化系统绝大部分采用BS架构实现,如门户网站、OA系统、电商网站等,通过浏览器输入Web网址即可访问,对于使用者来说非常便捷,对于开发维护者来说也非常方便,程序维护只需更新服务器即可,使用者无感知。但是CS架构的WinForm客户端程序仍然具有很实用的价值,如WPS、IT类的集成开发环境(数据库、图形处理软件)、PC端的小工具。本地程序处理性能更优秀,但是频繁更新带来不友好的客户端体验。还有一种非常常见且实用的业务场景, Web网页与WinForm程序互相集成应用。
张传宁IT讲堂
2021/08/31
4.9K0
WinForm嵌入Web网页的解决方案
.NET混合开发解决方案5 WebView2运行时与分发应用
  发布使用Microsoft Edge WebView2的应用程序时,客户端计算机上需要安装WebView2运行时,可以安装自动更新的Evergreen运行时,也可以安装固定版本的。
张传宁IT讲堂
2022/05/09
1.8K0
.NET混合开发解决方案5 WebView2运行时与分发应用
C#开发BIMFACE系列52 CS客户端集成BIMFACE应用的技术方案
  在我的博客《C#开发BIMFACE系列49 Web网页集成BIMFACE应用的技术方案》、《C#开发BIMFACE系列50 Web网页中使用jQuery加载模型与图纸》、《C#开发BIMFACE系列51 Web网页中使用Vue.js加载模型与图纸》三篇文章中介绍了Web网页中集成BIMFace应用开发的技术方案与示例程序。在建筑领域中涉及的应用管理系统绝大部分都是BS架构Web形式,这是主流趋势。BIMFACE在网页中加载浏览模型图纸时用到了HTML5、CSS3、WebGL等新技术,无需安装任何插件,极速流畅的浏览体验,并且可以集成应用于App、小程序、公众号等移动端。
张传宁IT讲堂
2021/10/21
4.8K0
.NET混合开发解决方案15 WebView2控件集成到WinForm程序编译后的文件及结构说明
WinForm程序中集成WebView2控件后,编译项目(不运行),查看编译后的内容如下
张传宁IT讲堂
2022/05/14
1.5K0
.NET混合开发解决方案15 WebView2控件集成到WinForm程序编译后的文件及结构说明
.NET混合开发解决方案7 WinForm程序中通过NuGet管理器引用集成WebView2控件
  WebView2组件支持在WinForm、WPF、WinUI3、Win32应用程序中集成加载Web网页功能应用。本篇主要介绍如何在WinForm程序中集成WebView2组价的详细过程。
张传宁IT讲堂
2022/05/09
1.2K0
.NET混合开发解决方案7 WinForm程序中通过NuGet管理器引用集成WebView2控件
跨平台桌面开发,Electron还是WebView2 (下篇)
好了,前面两篇铺垫了一些内容,这周终于进行这个话题的核心内容了,就是对于跨平台桌面来说,Electron与WebView2这两个非常类似的技术方案究竟哪个更合适?
御剑
2022/03/09
13.2K0
跨平台桌面开发,Electron还是WebView2 (下篇)
推荐阅读
相关推荐
.NET混合开发解决方案12 网页JS调用C#方法访问WinForm或WPF窗体
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验