在 Electron 中添加一个包含"不再提示"选项的确认对话框可以通过 checkboxLabel
和 checkboxChecked
属性在 dialog.showMessageBox
函数中实现。这两个属性分别用于设置复选框的标签和初始状态。您可以根据用户的选择来决定是否在将来再显示此对话框。
以下是一个更新的示例,其中加入了"不再提示"的复选框:
javascript
const { app, BrowserWindow, dialog } = require('electron');
const fs = require('fs');
const path = require('path');
// 设置配置文件路径
const configPath = path.join(app.getPath('userData'), 'config.json');
// 从文件读取配置
function readConfig() {
try {
return JSON.parse(fs.readFileSync(configPath, 'utf8'));
} catch (error) {
return { showPrompt: true };
}
}
// 写入配置到文件
function writeConfig(config) {
fs.writeFileSync(configPath, JSON.stringify(config), 'utf8');
}
app.on('ready', () => {
let mainWindow = new BrowserWindow({
width: 800,
height: 600
});
mainWindow.on('close', (e) => {
e.preventDefault(); // 阻止默认关闭操作
const config = readConfig();
if (config.showPrompt) {
dialog.showMessageBox(mainWindow, {
type: 'question',
buttons: ['Yes', 'No'],
title: 'Confirm',
message: 'Are you sure you want to quit?',
checkboxLabel: 'Do not ask me again',
checkboxChecked: false
}).then(result => {
if (result.response === 0) { // 用户点击了"Yes"
if (result.checkboxChecked) {
writeConfig({ showPrompt: false });
}
mainWindow = null; // 销毁窗口
app.quit(); // 退出应用
}
});
} else {
mainWindow = null; // 直接销毁窗口
app.quit(); // 退出应用
}
});
mainWindow.loadURL('https://www.example.com');
});
在这个例子中:
- 使用
fs
模块来读取和写入配置文件,这个文件用于保存用户的选择是否再次显示提示。 checkboxLabel
设置了复选框的标签。checkboxChecked
控制复选框的初始勾选状态。- 当用户勾选"不再提示"并确认关闭时,应用会更新配置文件以记录这一选择,并在下次尝试关闭时直接退出,不再显示对话框。
这样,用户就可以控制是否希望在未来被再次提示。