使用app.quit()closures电子应用程序中的所有打开的窗口是不好的做法?

我有一个与NodeJS和Express的电子应用程序。 我有一个文件(app.js)的主要stream程代码和另一个文件(router.js)中的路由。

主文件创build主窗口:

mainWindow = new BrowserWindow({width: 1280, height: 800, icon: iconPath}); 

每当您点击应用程序中的PDF文档链接时,路线文件都会创build一个新窗口:

  router.get('/docs/:module/:type/:file', function(req, res) { openPDF(req.params.module,req.params.type,req.params.file); res.end(); }); // open pdf's in a new window let newWindow; const openPDF = function(module,filetype,filename) { let file = 'file:///' + __dirname + '/app/docs/' + module + '/' + filetype + '/' + filename; let newWindow = new BrowserWindow({ width: 800, height: 600, icon: iconPath, webPreferences: { nodeIntegration: false } }); newWindow.setMenu(null); // newWindow.webContents.openDevTools(); const param = qs.stringify({file: file}); newWindow.loadURL('file://' + __dirname + '/app/pdfjs/web/viewer.html?' + param); newWindow.on('closed', function() { newWindow = null; }); } 

当我closures主窗口时,我想让其他任何打开的窗口closures。 我一直在试图实现这个困难的时间(两个窗口都在主要过程中,所以我不能使用IPC,据我所知)。然后,我意识到,如果我调用app.quit()时,主窗口closures它closures所有其他窗口:

 // Emitted when the window is closed. mainWindow.on('closed', function () { // Dereference the window object, usually you would store windows // in an array if your app supports multi windows, this is the time // when you should delete the corresponding element. mainWindow = null // quitting the app on main window close will close any other open windows app.quit(); }) 

我的问题是这是否是一件坏事。 它可以在没有任何用户input的情况下终止所有打开的窗口,但是没有未保存的工作可能会丢失,因为所有的新窗口都是pdf,无法编辑。

您应该考虑使用像Redux或Flux这样的状态容器框架来pipe理closures。 这样,当您收到来自用户的closures信号时,您可以发送信号以确保:

  • 提示用户,如果他们的数据未保存
  • 如果需要,将应用程序的configuration数据caching到文件( 在下次启动时从以前的状态恢复
  • 然后运行app.quit()以确保安全退出

除此之外,如果您的应用程序不需要安全closures,那么app.quit本身就是封闭电子应用程序的完美方式。

几件事情:

首先,你说“两个窗口都在主stream程中,所以我不能使用IPC。 事实上,这是不正确的。 使用BrowserWindow本身启动另一个进程。 在生成BrowserWindow的时候,在Electron生态系统(实际上是带有Electron shell用户界面和API附加组件的Node环境)中,您正在创build新的渲染进程,并且每个渲染进程都具有可供主进程和渲染进程访问的IPC通道另一个。

其次,你在mainWindow的'close'事件上询问使用app.quit() (“ 我的问题是这是否是一件坏事 ”)。 正如你所说,只要你不担心清理窗口/过程中的任何数据,这是很好的。 即使你不得不清理一些东西,你也可以在'close'事件函数中处理它。 所以,不要担心,这不是一件坏事。