.NET桌面程序混合开发之三:WebView2与JS的深度应用
在 WebView2 控件中使用 JavaScript 根据需求自由扩展原生应用的能力。本文探讨如何在 WebView2 中使用 JavaScript,并列举如何使用高级 WebView2 特性和功能进行开发。
一、开始之前
本文假定你已经有过WebView2开发的经验。如果你未接触过WebView2,请先阅读本系列文章的前两篇 .NET桌面程序混合开发之一:Winform+H5,WebView2概览 和 .NET桌面程序混合开发之二:在原生WinFrom程序中使用WebView2
二、WebView2核心功能
以下两个函数助你将JavaScript植入你的应用中
| API | 描述 |
|---|---|
| ExecuteScriptAsync | 在WebView2中执行JavaScript脚本。可以从本系统文章的前两篇中了解更多信息。 |
| OnDocumentCreatedAsync | 当页面的DOM创建时执行。 |
三、场景1:运行指定脚本文件
这个场景中,将从WebView2访问一段指定的JavaScript脚本。
注意:尽管编写内联 JavaScript 对于 JavaScript 运行效率可能比较高效,但您会丢失 JavaScript 颜色主题和行格式,也使得在 Visual Studio 中编写大段代码变得困难。
为解决这个问题,先创建单独的JavaScript文件,再将对文件的引用传给函数 ExecuteScriptAsync 的参数。
- 在工程中新建一个
.js文件,里面写好你想要运行的js代码。这里在工程中新建script.js文件。 - 将这个js文件转化为String对象,然后传给函数
ExecuteScriptAsync
a. 把脚本文件转换为字符串对象string text = System.IO.File.ReadAllText(@"C:\PATH_TO_YOUR_FILE\script.js");b. 将以上代码复制到你的主窗体初始化函数中
- 通过
ExecuteScriptAsync将脚本传递给页面await webView.CoreWebView2.ExecuteScriptAsync(text);
四、场景2:去掉页面拖拽功能
本部分探讨使用脚本去除WebView2控件中的页面的拖拽功能。
开始前,先看下当前控件所具备的拖拽功能。
- 任意创建一个.txt文件,比如,创建名为
contoso.txt,写入任意文字。 - 运行之前系统文章中创建的程序。
- 把
contoso.txt文件拖拽到程序的WebView2控件时,会自动打开一个新的窗口显示文件内容。
接下来,添加代码以移除WebView2控件自带的拖拽功能:
- 把以下代码拷贝到主窗体的初始化函数
InitializeAsync()中:
await webView.CoreWebView2.ExecuteScriptAsync("window.addEventListener('dragover',function(e){e.preventDefault();},false);");
await webView.CoreWebView2.ExecuteScriptAsync("window.addEventListener('drop',function(e){" +
"e.preventDefault();" +
"console.log(e.dataTransfer);" +
"console.log(e.dataTransfer.files[0])" +
"}, false);");
- 运行工程
- 试着再次将
contoso.txt拖入WebView2控件中,会发现已经不打开新窗体了。
五、场景3:禁用右键菜单
本部分将移除页面上默认的右建菜单。开始前,先看下在当前的页面上点右键的弹出菜单:
- 运行工程
- 在WebView2控件的任意地方点右键。在弹出的菜单中有各种默认的菜单项。

接着来添加代码移除右键弹出菜单功能。
- 将下面的代码复制粘贴到窗体初始化函数
InitializeAsync()中
await webView.CoreWebView2.ExecuteScriptAsync("window.addEventListener('contextmenu', window => {window.preventDefault();});");
- 再次运行,此时已无法点开右键了。
.NET桌面程序混合开发之三:WebView2与JS的深度应用的更多相关文章
- Hybrid小程序混合开发之路 - 数据交互
HTML+CSS是历史悠久.超高自由度.控制精准.表现能力极强.编码简单.学习门槛超低.真跨平台的一种UI界面开发方式. 本文介绍的是微信小程序和H5混合开发的一种数据交互方式. 很多应用在原生界面中 ...
- .NET混合开发解决方案12 网页JS调用C#方法访问WinForm或WPF窗体
系列目录 [已更新最新开发文章,点击查看详细] WebView2控件应用详解系列博客 .NET桌面程序集成Web网页开发的十种解决方案 .NET混合开发解决方案1 WebView2简介 .NE ...
- .NET混合开发解决方案15 WebView2控件集成到WinForm程序编译后的文件及结构说明
系列目录 [已更新最新开发文章,点击查看详细] WebView2控件应用详解系列博客 .NET桌面程序集成Web网页开发的十种解决方案 .NET混合开发解决方案1 WebView2简介 .NE ...
- .NET混合开发解决方案13 自定义WebView2中的上下文菜单
系列目录 [已更新最新开发文章,点击查看详细] WebView2控件应用详解系列博客 .NET桌面程序集成Web网页开发的十种解决方案 .NET混合开发解决方案1 WebView2简介 .NE ...
- .NET混合开发解决方案14 WebView2的基本身份验证
系列目录 [已更新最新开发文章,点击查看详细] WebView2控件应用详解系列博客 .NET桌面程序集成Web网页开发的十种解决方案 .NET混合开发解决方案1 WebView2简介 .NE ...
- .NET混合开发解决方案16 管理WebView2的用户数据
系列目录 [已更新最新开发文章,点击查看详细] WebView2控件应用详解系列博客 .NET桌面程序集成Web网页开发的十种解决方案 .NET混合开发解决方案1 WebView2简介 .NE ...
- .NET混合开发解决方案24 WebView2对比CefSharp的超强优势
系列目录 [已更新最新开发文章,点击查看详细] WebView2控件应用详解系列博客 .NET桌面程序集成Web网页开发的十种解决方案 .NET混合开发解决方案1 WebView2简介 .NE ...
- [Hybrid App]--Android混合开发,Android、Js的交互
AndroidJs通信 *:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !imp ...
- .NET混合开发解决方案7 WinForm程序中通过NuGet管理器引用集成WebView2控件
系列目录 [已更新最新开发文章,点击查看详细] WebView2组件支持在WinForm.WPF.WinUI3.Win32应用程序中集成加载Web网页功能应用.本篇主要介绍如何在WinForm ...
- .NET混合开发解决方案8 WinForm程序中通过设置固定版本运行时的BrowserExecutableFolder属性集成WebView2控件
系列目录 [已更新最新开发文章,点击查看详细] 在我的博客<.NET混合开发解决方案7 WinForm程序中通过NuGet管理器引用集成WebView2控件>中介绍了WinForm ...
随机推荐
- Java+HTML预习笔记_20140610
1.HTML <img> 标签 HTML <img> 标签 实例 在下面的例子中,我们在页面中插入一幅 W3School 的工程师在上海鲜花港拍摄的郁金香照片: <img ...
- nginx重新整理——————反向代理[五]
前言 简单整理一下反向代理. 正文 为什么要反向代理呢? 其实这个问题也是相对来说比较好理解的. 一个就是解耦,为什么这么说呢,就是将原本应用的一部分剥离出来,比如说限制流量,如果在程序中写那么相比会 ...
- redis 简单整理——客户端案例分析[十八]
前言 简单整理一下客户端案例分析. 正文 现象一: 服务端现象:Redis主节点内存陡增,几乎用满maxmemory,而从节点 内存并没有变化. 客户端现象:客户端产生了OOM异常,也就是Redis主 ...
- .gitignore 基础
前言 gitignore文件有几种方式生成. 1.在创建版本库的时候生成. 2.自己手动添加: windows环境下,不能把文件直接改名为.gitignore,会提示你必须输入文件名.所以我们先新建一 ...
- css 你真的了解padding吗?
前言 padding 简写属性在一个声明中设置所有内边距属性,实际上在使用过程中它对block元素和内联元素的处理是不一样的. 正文 对于block元素 如果宽度非auto那么容器会变大,如果容器宽度 ...
- 力扣1(java&python)-两数之和(简单)
题目: 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标. 你可以假设每种输入只会对应一个答案.但是, ...
- 五福背后的 Web 3D 引擎 Oasis Engine 正式开源
简介: Oasis 从开源走向新的起点,用 3D 化的交互和表达让世界变得更美好. 相信大家已经体验了今年支付宝五福的活动,无论是今年的五福首页还是打年兽游戏都是由蚂蚁互动图形引擎(代号:Oasis ...
- 配置审计(Config)变配报警设置
简介: 本文作者[紫极zj],本篇将主要介绍通过配置审计的自定义规则等服务,对负载均衡进行预警行为的相关介绍. 前言 配置审计(Config)将您分散在各地域的资源整合为全局资源列表,可便捷地搜索全局 ...
- DevOps 能力提升模型
简介: DevOps 能力反映的是技术研发响应业务变化的能力.随着组织规模的增加和业务复杂性增长,DevOps 能力会变得越来越重要.持续提升 DevOps 的能力成为技术研发的共同挑战. 编者按:本 ...
- dotnet C# 使用 Vortice 支持 Direct2D1 离屏渲染
本文告诉大家如何使用 Vortice 进行 D2D 的离屏渲染功能,本文将在一个纯控制台无窗口的应用下,使用 Direct2D1 进行离屏绘制,将绘制结果保存为本地图片文件 本文属于使用 Vortic ...