单击网页提交按钮后关闭 webview2 应用程序
Close webview2 application after webpage submit button click
我创建了一个简单的 windows 应用程序,它使用 webview2 在 winform 中显示网站。单击网站上的提交按钮后,我需要关闭此 windows 应用程序。
可能吗?
我是 Windows 开发新手。
解决方案实际上取决于页面的内容和工作方式。在大多数情况下,您不应该在点击提交按钮后立即关闭应用程序,您需要等到收到提交的响应,如果提交成功,然后您可以关闭 window.
这里分享两个例子:
- 处理提交事件并从 WebView2 调用 C# 方法
- 根据 URL
检测提交的调查表是否成功
请记住,这里的两个示例都是为了学习目的,让您了解如何在 C# 中处理 js 事件。您需要调整它们以使其适用于您的特定情况。
示例 1 - 处理提交事件并从 WebView2 调用 C# 方法
在下面的例子中你可以了解到:
- 如何处理
submit
表单的事件
- 如何从 JavaScript 代码调用 C# 方法并将 js 对象传递给 .NET
代码如下:
WebView2Host host;
private async void TestForm_Load(object sender, EventArgs e)
{
await webView21.EnsureCoreWebView2Async();
host = new WebView2Host(this);
webView21.NavigateToString(
"<html>" +
"<head><title>Test from</title></head>" +
"<body>" +
"<form id='form1' action='/' method='post'>" +
"<input type='text' name='someProperty' value ='something'/>" +
"<input type='submit' value='Click me'/>" +
"</form>" +
"</body>");
webView21.CoreWebView2.AddHostObjectToScript("host", host);
webView21.CoreWebView2.DOMContentLoaded += CoreWebView2_DOMContentLoaded;
}
private async void CoreWebView2_DOMContentLoaded(object sender,
CoreWebView2DOMContentLoadedEventArgs e)
{
await webView21.ExecuteScriptAsync(
"var form = document.getElementById('form1');" +
"form.addEventListener('submit', function(e){" +
"var data = JSON.stringify(Object.fromEntries(new FormData(form)));" +
"window.chrome.webview.hostObjects.sync.host.OnSubmit(data);" +
"});");
}
public class WebView2Host
{
TestForm hostForm;
public WebView2Host(TestForm hostForm)
{
this.hostForm = hostForm;
}
public void OnSubmit(string data)
{
//data is in json format
MessageBox.Show($"data: {data}", "C# OnSubmit!");
//You can close form like this: hostForm.Close();
}
}
示例 2 - 根据 URL
检测提交的调查表是否成功
你可以依赖任意一个navigation events,查看页面的URL,看是否提交成功。在这个例子中,我展示了如何使用 google 调查表:
private async void TestForm_Load(object sender, EventArgs e)
{
await webView21.EnsureCoreWebView2Async();
webView21.Source = new Uri("https://forms.gle/pspLBJFZW5z8J1K37");
webView21.CoreWebView2.SourceChanged += CoreWebView2_SourceChanged;
}
private void CoreWebView2_SourceChanged(object? sender,
CoreWebView2SourceChangedEventArgs e)
{
if (webView21.Source.ToString().EndsWith("/formResponse"))
{
MessageBox.Show("Submitted successfully.");
}
}
我创建了一个简单的 windows 应用程序,它使用 webview2 在 winform 中显示网站。单击网站上的提交按钮后,我需要关闭此 windows 应用程序。
可能吗? 我是 Windows 开发新手。
解决方案实际上取决于页面的内容和工作方式。在大多数情况下,您不应该在点击提交按钮后立即关闭应用程序,您需要等到收到提交的响应,如果提交成功,然后您可以关闭 window.
这里分享两个例子:
- 处理提交事件并从 WebView2 调用 C# 方法
- 根据 URL 检测提交的调查表是否成功
请记住,这里的两个示例都是为了学习目的,让您了解如何在 C# 中处理 js 事件。您需要调整它们以使其适用于您的特定情况。
示例 1 - 处理提交事件并从 WebView2 调用 C# 方法
在下面的例子中你可以了解到:
- 如何处理
submit
表单的事件 - 如何从 JavaScript 代码调用 C# 方法并将 js 对象传递给 .NET
代码如下:
WebView2Host host;
private async void TestForm_Load(object sender, EventArgs e)
{
await webView21.EnsureCoreWebView2Async();
host = new WebView2Host(this);
webView21.NavigateToString(
"<html>" +
"<head><title>Test from</title></head>" +
"<body>" +
"<form id='form1' action='/' method='post'>" +
"<input type='text' name='someProperty' value ='something'/>" +
"<input type='submit' value='Click me'/>" +
"</form>" +
"</body>");
webView21.CoreWebView2.AddHostObjectToScript("host", host);
webView21.CoreWebView2.DOMContentLoaded += CoreWebView2_DOMContentLoaded;
}
private async void CoreWebView2_DOMContentLoaded(object sender,
CoreWebView2DOMContentLoadedEventArgs e)
{
await webView21.ExecuteScriptAsync(
"var form = document.getElementById('form1');" +
"form.addEventListener('submit', function(e){" +
"var data = JSON.stringify(Object.fromEntries(new FormData(form)));" +
"window.chrome.webview.hostObjects.sync.host.OnSubmit(data);" +
"});");
}
public class WebView2Host
{
TestForm hostForm;
public WebView2Host(TestForm hostForm)
{
this.hostForm = hostForm;
}
public void OnSubmit(string data)
{
//data is in json format
MessageBox.Show($"data: {data}", "C# OnSubmit!");
//You can close form like this: hostForm.Close();
}
}
示例 2 - 根据 URL
检测提交的调查表是否成功你可以依赖任意一个navigation events,查看页面的URL,看是否提交成功。在这个例子中,我展示了如何使用 google 调查表:
private async void TestForm_Load(object sender, EventArgs e)
{
await webView21.EnsureCoreWebView2Async();
webView21.Source = new Uri("https://forms.gle/pspLBJFZW5z8J1K37");
webView21.CoreWebView2.SourceChanged += CoreWebView2_SourceChanged;
}
private void CoreWebView2_SourceChanged(object? sender,
CoreWebView2SourceChangedEventArgs e)
{
if (webView21.Source.ToString().EndsWith("/formResponse"))
{
MessageBox.Show("Submitted successfully.");
}
}