在 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 的参数。

  1. 在工程中新建一个.js文件,里面写好你想要运行的js代码。这里在工程中新建script.js文件。
  2. 将这个js文件转化为String对象,然后传给函数 ExecuteScriptAsync
    a. 把脚本文件转换为字符串对象
    string text = System.IO.File.ReadAllText(@"C:\PATH_TO_YOUR_FILE\script.js");

    b. 将以上代码复制到你的主窗体初始化函数中

  3. 通过ExecuteScriptAsync将脚本传递给页面
    await webView.CoreWebView2.ExecuteScriptAsync(text);

四、场景2:去掉页面拖拽功能

本部分探讨使用脚本去除WebView2控件中的页面的拖拽功能。
开始前,先看下当前控件所具备的拖拽功能。

  1. 任意创建一个.txt文件,比如,创建名为contoso.txt,写入任意文字。
  2. 运行之前系统文章中创建的程序。
  3. 把 contoso.txt 文件拖拽到程序的WebView2控件时,会自动打开一个新的窗口显示文件内容。

接下来,添加代码以移除WebView2控件自带的拖拽功能:

  1. 把以下代码拷贝到主窗体的初始化函数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);");
  1. 运行工程
  2. 试着再次将contoso.txt拖入WebView2控件中,会发现已经不打开新窗体了。

五、场景3:禁用右键菜单

本部分将移除页面上默认的右建菜单。开始前,先看下在当前的页面上点右键的弹出菜单:

  1. 运行工程
  2. 在WebView2控件的任意地方点右键。在弹出的菜单中有各种默认的菜单项。

接着来添加代码移除右键弹出菜单功能。

  1. 将下面的代码复制粘贴到窗体初始化函数InitializeAsync()
await webView.CoreWebView2.ExecuteScriptAsync("window.addEventListener('contextmenu', window => {window.preventDefault();});");
  1. 再次运行,此时已无法点开右键了。
 
 

.NET桌面程序混合开发之三:WebView2与JS的深度应用的更多相关文章

  1. Hybrid小程序混合开发之路 - 数据交互

    HTML+CSS是历史悠久.超高自由度.控制精准.表现能力极强.编码简单.学习门槛超低.真跨平台的一种UI界面开发方式. 本文介绍的是微信小程序和H5混合开发的一种数据交互方式. 很多应用在原生界面中 ...

  2. .NET混合开发解决方案12 网页JS调用C#方法访问WinForm或WPF窗体

    系列目录     [已更新最新开发文章,点击查看详细] WebView2控件应用详解系列博客 .NET桌面程序集成Web网页开发的十种解决方案 .NET混合开发解决方案1 WebView2简介 .NE ...

  3. .NET混合开发解决方案15 WebView2控件集成到WinForm程序编译后的文件及结构说明

    系列目录     [已更新最新开发文章,点击查看详细] WebView2控件应用详解系列博客 .NET桌面程序集成Web网页开发的十种解决方案 .NET混合开发解决方案1 WebView2简介 .NE ...

  4. .NET混合开发解决方案13 自定义WebView2中的上下文菜单

    系列目录     [已更新最新开发文章,点击查看详细] WebView2控件应用详解系列博客 .NET桌面程序集成Web网页开发的十种解决方案 .NET混合开发解决方案1 WebView2简介 .NE ...

  5. .NET混合开发解决方案14 WebView2的基本身份验证

    系列目录     [已更新最新开发文章,点击查看详细] WebView2控件应用详解系列博客 .NET桌面程序集成Web网页开发的十种解决方案 .NET混合开发解决方案1 WebView2简介 .NE ...

  6. .NET混合开发解决方案16 管理WebView2的用户数据

    系列目录     [已更新最新开发文章,点击查看详细] WebView2控件应用详解系列博客 .NET桌面程序集成Web网页开发的十种解决方案 .NET混合开发解决方案1 WebView2简介 .NE ...

  7. .NET混合开发解决方案24 WebView2对比CefSharp的超强优势

    系列目录     [已更新最新开发文章,点击查看详细] WebView2控件应用详解系列博客 .NET桌面程序集成Web网页开发的十种解决方案 .NET混合开发解决方案1 WebView2简介 .NE ...

  8. [Hybrid App]--Android混合开发,Android、Js的交互

    AndroidJs通信 *:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !imp ...

  9. .NET混合开发解决方案7 WinForm程序中通过NuGet管理器引用集成WebView2控件

    系列目录     [已更新最新开发文章,点击查看详细] WebView2组件支持在WinForm.WPF.WinUI3.Win32应用程序中集成加载Web网页功能应用.本篇主要介绍如何在WinForm ...

  10. .NET混合开发解决方案8 WinForm程序中通过设置固定版本运行时的BrowserExecutableFolder属性集成WebView2控件

    系列目录     [已更新最新开发文章,点击查看详细] 在我的博客<.NET混合开发解决方案7 WinForm程序中通过NuGet管理器引用集成WebView2控件>中介绍了WinForm ...

随机推荐

  1. HarmonyOS实现静态与动态数据可视化图表

    一. 样例介绍 本篇Codelab基于switch组件和chart组件,实现线形图.占比图.柱状图,并通过switch切换chart组件数据的动静态显示.要求实现以下功能: 1.  实现静态数据可视化 ...

  2. Windows Server 2012 安装WireShark

    一.环境说明 Windows Server 2012 R2 版本64位: 安装wireshark 二.问题描述 安装wireshark提示 The Visual C++ Redistributable ...

  3. Blocks—单调栈

    思路: 题目意思是求平均数>=k的最长序列先求出a[i]-k的前缀和就是求sum[i]-sum[j]>=0的最大i-j当j<=k<=isum[j]<=sum[k]j< ...

  4. jenkins 持续集成和交付 —— 触发器(六)

    前言 什么是触发器呢?当某种条件达到的时候将会触发某个机关. 正文 jenkins 内置4种触发器: 1.触发远程构建 2.其他工程构建后触发 3.定时触发 4.轮询SCM 那么就来介绍一下这几种吧. ...

  5. Java集成系列:高效构建自定义插件

    前言 随着软件开发的快速发展和需求的不断增长,开发人员面临着更多的压力和挑战.传统的开发方法需要花费大量的时间和精力,而低代码开发平台的出现为开发人员提供了一种更加高效.快速的开发方式.今天小编就以构 ...

  6. 教你如何进行Prometheus 分片自动缩放

    本文分享自华为云社区<使用 Prometheus-Operator 进行 Prometheus + Keda 分片自动缩放>,作者: Kubeservice@董江. 垂直缩放与水平缩放 P ...

  7. 【Serverless实战】B站每日自动签到&&传统单节点网站的Serverless上云

    简介: Serverless好哇!这里将针对个人与生产两个应用方向的测评 使用Serverless实现自动获取每日B站的经验值,让你更快冲到LV6! 你的业务站点还是一台服务器All in One吗? ...

  8. Apsara Stack 技术百科 | 如何「场景化」的企业上云

    简介: 企业上云离不开数据和业务上云,如何在确保安全的前提下,低成本高效率的平滑上云,在云上又能真正解决哪些实际业务问题?混合云君今天给大家讲讲最经典的三个场景~ 随着"十四五"规 ...

  9. Util 应用框架 UI 全新升级

    Util UI 已经开发多年, 并在多家公司的项目使用. 不过一直以来, Util UI 存在一些缺陷, 始终未能解决. 最近几个月, Util 团队下定决心, 终于彻底解决了所有已知缺陷. Util ...

  10. JAVA也能用上Seq啦

    前言 在.NET生态中,Serilog凭借其强大的结构化日志记录功能和与Seq的无缝集成,已经成为许多开发者的首选日志记录工具.Seq作为一个日志检索和仪表板工具,能够将日志中的插值转换为结构化数据, ...