我想在electron.js应用程序中创建一个包含yes和no按钮的消息框,我尝试在electron中使用dialog来实现,但没有成功:
const electron = require('electron')
const { dialog } = electron
console.log(dialog) // undefined
const electron = require('electron')
const dialog = electron.remote.dialog
console.log(dialog) // Uncaught Error: Cannot read "dialog" of undefined (remote is undefined)
然后,我试着用dialog来做,这是npm中的一个模块,但是它没有做我想做的事情。没有任何是或否按钮,当我点击OK或关闭窗口时,它也返回了相同的响应:
const electron = require('electron')
const dialog = require('dialog')
dialog.info('Are you sure?', 'Confirmation', function(exitCode) {
if (exitCode == 0) {
// Should clicked OK (always response)
}
if (exitCode == 1) {
// Should closed window (but never works)
}
})
型
我做错了什么?
1条答案
按热度按时间c2e8gylq1#
您将需要使用Electron的
dialog.showMessageBox();
方法。对话框.showMessageBoxSync();方法将阻塞主进程,直到收到响应为止,因此除非有意,否则您不会希望使用该方法。
我已经把对话框的创建和管理放到了
main.js
文件中。如果你想把它移到它自己的文件中,这不是问题。如果你想让你的对话框成为主窗口的子窗口,你所需要做的就是get()
(主)窗口示例。main.js
(主流程)为了在进程之间进行正确的通信,我们必须使用Inter-Process Communication。
preload.js
(主流程)最后,
index.html
文件将侦听按钮单击,单击后,向主进程发送消息以打开对话框。从对话框接收到有效响应后,该响应将发送回渲染进程进行处理。
PS:渲染方法
ipcRenderer.invoke()
可以用来代替ipcRenderer.send()
方法。但是如果是这样的话,你需要在渲染过程中处理“No”或者escape(ESC)响应。index.html
(渲染进程)要在对话框中使用2个以上的按钮,在创建对话框时,您可能需要指定一个
cancelId
,并在执行任何操作之前检查所有有效的返回值。