electron - 电子:BrowserWindow.on 关闭提示不起作用
问题描述
我有一个使用 React 的普通电子应用程序。我想在关闭之前显示一个提示。预期的行为是当我单击“X”按钮时,窗口必须保持打开状态并在关闭之前显示对话框,以便我可以选择是否真的要退出。但相反,这就是发生 的情况电子窗口在显示对话框之前关闭。在我单击任何按钮之前,对话框会自行关闭。这是 main.dev.ts 中包含的代码
mainWindow.on('close',(e) => {
var choice = dialog.showMessageBox(mainWindow,
{
type: 'question',
buttons: ['Yes', 'No'],
title: 'Confirm',
message: 'Are you sure you want to quit?'
});
if(choice == 1){
e.preventDefault();
}});
我已经检查过 stackoverflow 上是否有一些帮助问题,但没有找到。您的帮助将不胜感激。
解决方案
如果您显示确认提示,您需要调用e.preventDefault();
任何一种方式来保持窗口打开。
然后,如果他们单击“是”,请单独关闭窗口。
但是,您会遇到一个问题,即一旦用户单击“是”后窗口关闭,它将close
再次触发事件,从而导致无限循环。我已经用hasConfirmedClose
下面的变量解决了这个问题。
这是可行的:
var hasConfirmedClose = false;
mainWindow.on('close', (e) => {
if (!hasConfirmedClose) {
e.preventDefault(); // Prevent default no matter what.
var choice = dialog.showMessageBox(mainWindow, {
type: 'question',
buttons: ['Yes', 'No'],
title: 'Confirm',
message: 'Are you sure you want to quit?'
});
if (choice == 1) {
hasConfirmedClose = true;
mainWindow.close();
}
}
});
推荐阅读
- flutter - Navigator.push 在 TabBar 下方打开一个页面,但我需要它来全屏打开页面
- properties - 如何从属性文件中读取值以设置 Spring 或 Blueprint xml 标记的属性值
- javascript - (...Array([random number]).keys().toString()) 为什么这个表达式的长度和值总是给出相同的结果?
- python - 根据 Pandas 中的列表对选定的多列进行排序
- google-bigquery - 在 BigQuery 中,如何找到对应于每个(纬度、经度)的第 16 级的 S2_ID?
- asp.net-core - 如何防止在 logs.txt 文件中保存后台作业调用
- django - 序列化嵌套json时如何从父序列化程序获取字段?
- c# - 如何加入三个table rest api .net core 5?
- python - 在 MultiIndex pandas 数据帧上使用多维索引?
- javascript - 如何编写一个接受 n 个参数并被调用 n 次的函数