.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. 把指令碼檔案轉換為字串物件
b. 將以上程式碼複製到你的主窗體初始化函式中string text = System.IO.File.ReadAllText(@"C:\PATH_TO_YOUR_FILE\script.js");
- 通過
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();});");
- 再次執行,此時已無法點開右鍵了。
在 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. 把指令碼檔案轉換為字串物件
b. 將以上程式碼複製到你的主窗體初始化函式中string text = System.IO.File.ReadAllText(@"C:\PATH_TO_YOUR_FILE\script.js");
- 通過
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();});");
- 再次執行,此時已無法點開右鍵了。