我有一个带有NodeJS和Express的Electron应用程序。主进程代码在一个文件(app.js)中,路由在另一个文件(router.js)中。
主文件创建了主窗口:
mainWindow = new BrowserWindow({width: 1280, height: 800, icon: iconPath});
路由文件在应用程序中点击PDF文档链接时会创建一个新窗口:
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;
});
}
当我关闭主窗口时,希望其他打开的窗口也能被关闭。我一直在试图实现这个功能(两个窗口都在同一进程中,所以据我所知我不能使用IPC)。然后我意识到,如果在主窗口关闭时调用app.quit(),它会关闭所有其他窗口:
// 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();
})
我的问题是这样做是否不好。它会结束所有打开的窗口而不需要用户输入,但由于所有新窗口都是不能编辑的pdf文件,所以不会有任何未保存的工作丢失。