在 WebView2 控件中使用 JavaScript 根据需求自由扩展原生应用的能力。本文探讨如何在 WebView2 中使用 JavaScript,并列举如何使用高级 WebView2 特性和功能进行开发。
本文假定你已经有过WebView2开发的经验。如果你未接触过WebView2,请先阅读本系列文章的前两篇 .NET桌面程序混合开发之一:Winform+H5,WebView2概览 和 .NET桌面程序混合开发之二:在原生WinFrom程序中使用WebView2
以下两个函数助你将JavaScript植入你的应用中
API | 描述 |
---|---|
ExecuteScriptAsync | 在WebView2中执行JavaScript脚本。可以从本系统文章的前两篇中了解更多信息。 |
OnDocumentCreatedAsync | 当页面的DOM创建时执行。 |
这个场景中,将从WebView2访问一段专有的JavaScript脚本。
注意:尽管编写内联 JavaScript 对于 JavaScript 运行效率可能比较高效,但您会丢失 JavaScript 颜色主题和行格式,也使得在 Visual Studio 中编写大段代码变得困难。
为解决这个问题,先创建单独的JavaScript文件,再将对文件的引用传给函数 ExecuteScriptAsync
的参数。
.js
文件,里面写好你想要运行的js代码。这里在工程中新建script.js
文件。ExecuteScriptAsync
string text = System.IO.File.ReadAllText(@"C:\PATH_TO_YOUR_FILE\script.js");b. 将以上代码复制到你的主窗体初始化函数中
ExecuteScriptAsync
将脚本传递给页面await webView.CoreWebView2.ExecuteScriptAsync(text);
本部分探讨使用脚本去除WebView2控件中的页面的拖拽功能。
开始前,先看下当前控件所具备的拖拽功能。
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控件中,会发现已经不打开新窗体了。本部分将移除页面上默认的右建菜单。开始前,先看下在当前的页面上点右键的弹出菜单:
接着来添加代码移除右键弹出菜单功能。
InitializeAsync()
中await webView.CoreWebView2.ExecuteScriptAsync("window.addEventListener('contextmenu', window => {window.preventDefault();});");